Uso da memória pelos programas Java
As instruções de um programa a correr são temporariamente armazenados na memória do computador. Não é necessário o programador preocupar-se com a gestão da memória(coisa que não acontece em outras linguagens tais como o C ou C++): a JVM e o garbage collector tratam do assunto. Todavia ajuda sabermos onde são armazenados os dados na memória para termos uma melhor compreensão de como os objectos são criados. Consideremos a seguinte figura:

Há duas áreas distintas onde os dados de um programa são armazenados: stack e heap são duas formas (ou sítios) diferentes de armazenar em memória os elementos de um programa que está em execução.
Viver na Stack
Os seguintes elementos vivem na stack: Variáveis locais: as variáveis de tipos primitivos definidas dentro de um método ou como parâmetrosde um método.
Referências de variáveis locais:as variáveis que se referem a um objecto e são definidas dentro de um método ou como parâmetros de um método. Um objecto cuja variável local se refere vive na heap.
Invocações a métodos: quando invocamos um método, esse método é empurrado para a stack (i.e., é colocado no topo da stack
As variáveis locais vivem dentro do método e o seu alcance retringe-se ao método. Quando a execução do método termina, as variáveis locais desaparecem mas os objectos, cujas variáveis locais eventualmente se referem, continuam vivos na heap.
Viver na Heap
Os seguintes elementos vivem na heap:
Variáveis de instância: as variáveis de tipos primitivos definidas dentro da classe mas fora dos métodos.
Referências a variáveis de instância: as variáveis que se referem a um objecto e são definidas dentro da classe mas fora dos métodos.
Objectos: Todos os objectos vivem na heap
Resumindo: variáveis locais (primitivas ou referências) pertencem a métodos e vivem na stack enquanto que uma variável de instância pertence a um objecto e vive na heap. Todavia, uma referência de uma variável local na stack aponta para um objecto na heap e o objecto não morre com a morte da referência.
Os objectos que estão na heap que não estão a ser utilizados são, eventualmente, destruídos por um programa que se chama garbage collector de forma a libertar memória
Julho 2, 2008 às 8:27 pm
Ame essa pagina pq pode mostrar p/eu como é o uso da memoria no java muitias gracias!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! BJS!!!!