Statik yöntemler (aslında tüm yöntemler) ve statik değişkenler PermGen
, yansıma verilerinin bir parçası oldukları için (sınıfla ilgili veriler, örnekle ilgili değil) öbek bölümünde depolanır .
Açıklama için güncelleme :
PermGen alanında sadece değişkenlerin ve teknik değerlerinin (ilkeller veya referanslar) saklandığını unutmayın.
Statik değişkeniniz, nesnenin kendisi yığının normal bölümlerinde (genç / eski nesil veya hayatta kalan alan) depolanan bir nesneye bir referanstır. Bu nesneler (bunlar vb sınıfları gibi iç nesneler sürece) vardır olup PermGen alanda depolanan.
Misal:
static int i = 1; //the value 1 is stored in the PermGen section
static Object o = new SomeObject(); //the reference(pointer/memory address) is stored in the PermGen section, the object itself is not.
Çöp toplama üzerine bir kelime:
Do not güvenmek finalize()
onu çalıştırmak için garantili değil olarak. Bir nesne çöp toplama için uygun olsa bile, çöp toplayıcının ne zaman çalıştırılacağına ve neyin toplanacağına karar vermek tamamen JVM'ye bağlıdır.
Elbette, statik bir değişkeni null olarak ayarlayabilir ve böylece öbek üzerindeki nesnenin başvurusunu kaldırabilirsiniz, ancak bu, çöp toplayıcının onu toplayacağı anlamına gelmez (daha fazla başvuru olmasa bile).
Ek finalize()
olarak yalnızca bir kez çalıştırılır, bu nedenle istisnalar atmadığından veya nesnenin toplanmasını engellemediğinden emin olmalısınız. Sonlandırmayı bir istisna yoluyla durdurursanız finalize()
, aynı nesnede ikinci kez çağrılmaz.
Son bir not : kodun, çalışma zamanı verilerinin vb. Nasıl saklandığı, kullanılan JVM'ye bağlıdır, yani HotSpot bunu JRockit'ten farklı şekilde yapabilir ve bu aynı JVM'nin sürümleri arasında bile farklılık gösterebilir. Yukarıdakiler Java 5 ve 6 için HotSpot'a dayanmaktadır (bunlar temelde aynıdır) çünkü cevap verirken çoğu insanın bu JVM'leri kullandığını söyleyebilirim. Java'nın 8 itibarıyla hafıza modelinde önemli değişiklikler, kudretini yukarıdaki ifadeleri Java 8 HotSpot doğru olmayabilir - ve bu yüzden, Java 7 HotSpot değişiklikleri kontrol etmedi tahmin yukarıdaki bu sürümün hala geçerlidir, ama burada emin değilim.