public class Demo {
public static void main(String[] args) {
int x = 5;
Point p = new Point(1, 2);
}
}
class Point {
int x, y;
Point(int x, int y) { this.x = x; this.y = y; }
}x yerel değişkeni ve p'nin referans ettiği Point nesnesi JVM'in bellek alanlarında nerede yaşar?- aHem
xhemPointnesnesi heap'te yaşar; yalnızcap'nin kendisi stack frame'inde yaşar - b
xvepstack frame'de durur; yalnızcaPointnesnesi heap'te yaşar✓ - cHem
xhemPointnesnesimain'in stack frame'i içinde yaşar - d
xheap'te yaşar,Pointnesnesi vepise ikisi de stack'te yaşar
Açıklama:Her thread'in, aktif her metod çağrısı için bir frame'den oluşan kendi stack'i vardır.
x gibi primitive yerel değişkenler doğrudan o anki frame içinde saklanır. p gibi referans değişkenler de frame içinde saklanır, ama işaret ettikleri nesne -- burada new ile oluşturulan Point instance'ı -- tüm thread'lerin erişebildiği paylaşılan heap'te tahsis edilir. main döndüğünde frame (ve x, p) kaybolur, ama Point nesnesi yalnızca artık hiçbir şey ona referans vermediğinde ve garbage collector onu geri kazandığında yok olur.