Complementando as definições do thingol,
você deve observar que:
public void metodoX() {
Classe x;
Classe y = null;
Classe z = new Classe();
}
x,y e z são variáveis locais ao método “metodoX” e portanto são “preservadas” na pilha de execução desse código na JVM. O conteúdo “real” e interno (a VM) dessas variáveis são ponteiros (endereços) de memória onde será armazenado as informações do objeto.
No caso de x, existe o espaço em memória na pilha, mas ela não possui nenhum valor inicial e é um exemplo de declaração de variável apenas.
No caso de y, existe o espaço em memória na pilha e este espaço aponta (muito provavelmente) para uma constante interna que a VM entende como null. Neste caso, você tem um exemplo de declaração de variável e atribuição de um valor a essa variável.
No caso de z, existe o espaço em memória na pilha e existe um espaço alocado no heap para o objeto e este endereço é armazenado no espaço da pilha. Logo dizemos que z faz referência ao objeto (que está alocado no heap). Também neste caso, você tem como exemplo as três operações iniciais que se faz com objeto em java, ou seja: instanciação (criação de um objeto com base em uma classe), definição de uma variável local e associação dessa variável a nova instância.
Um objeto passa a ser passível de ser “coletado” pelo gc quando não existir mais nenhuma referência a ele.
fw