Galera, alguém poderia me explicar de uma forma simples, a diferença de Memória Heap e Memória Stack, já procurei no google, e encontrei várias explicações mas ok, entendi o que disseram, mas não vi isso aplicado!
Alguém teria um exemplo na prática pra mim entender facilmente?
Obrigado pela ajuda!
Bom,
Stack = pilha; Heap = Monte;
Quando criamos objetos em Java, mesmo que nos seja transparente, são utilizados ponteiros. Então na declaração abaixo:
Aluno a = new Aluno();
Você tem uma variável a que guardará o endereço de memória do objeto Aluno criado com a palavra new.
Aí, a fica na pilha (stack) e o objeto Aluno com todos os seus atributos e métodos fica na área heap (monte).
O contéudo da variavél a é apenas o endereço de memória, enquanto todo o objeto Aluno fica no monte.
Espero ter ajudado
Eu vi isso e talvez te ajude:
A stack is an area of memory that behaves like a stack ADT. It is used for storing information/objects that will not grow in size and will not be moved around in memory (in other words, the stack is used for storing static data objects). The stack requires very little janitor work from the OS/programmer.
The heap on the other hand, is a dynamic area of memory. You can use the heap to create data objects that are likely to grow (like vectors, maps, sets, etc.). The heap tends to suffer from fragmentation issues and needs to be garbage collected every so often to maintain its usability. Hence, the heap require much intervention from the memory management system of the OS or the programmer.
Na verdade o conceito de Stack (pilha) mais básico possível é uma estrutura de dados onde o último elemento que foi inserido é o primeiro a ser retirado.
O SO usa isso, por exemplo, quando um método A faz chamada ao B. O método A tem seu contexto de software salvo na pilha já que quando o método B terminar, espera-se recontinuar de onde A parou.
O heap é usado com alocação dinâmica de memória. Quando, em C, vc faz
int *x = malloc(sizeof(int));
ou em java qnd vc faz
Pessoa p = new Pessoa();
Excelente, muito obrigado! 8)
Opa só mais um detalhe aproveitando o post,
Objeto = Classe? ou nada a ver?
Não. Objeto != Classe… 
Isso é uma das coisas mais difíceis de se entendem no mundo OO. Sinceramente, eu mesmo demorei muuuuuito a entender isso e vi muitos colegas meus também com essa dificuldade. Depois que entendemos, passamos a achar banal!
Mas, a grosso modo, uma Classe seria uma espécie de “forma”. Ali vocÊ está moldando uma coisa e tudo o que ela tem (atributos) e pode fazer (métodos). Agora quando você quer fazer algo dessa “forma”, ai vocÊ cria um Objeto.
Ex.:
Pessoa é uma forma. Existem bilhões no mundo. Mas Fulano e Beltrano são objetos do tipo Pessoa. Eles tem atributos comuns, por exemplo, nome, fazem coisas comuns,por exemplo, andam, mas cada um a seu jeito. Então os Objetos tem caracteristicas iguais a Classe a que pertence, pois foram moldadas a partir dela, mas são completamente distintos entre si.
Confuso? Pois é, isso é assim mesmo. Mas tente entender esse pequeno conceito que estou tentando passar e pesquise bastante que isso vai ficar bem claro depois.
Espero ter ajudado
1 curtida