SORU
3 EKİM 2010, Pazar


java statik ayırma - yığın, yığın ve kalıcı nesil

Son zamanlarda java bellek ayırma düzenleri bir sürü şey okuyorum, ve çeşitli kaynaklardan okuyorum gibi birçok şüphe var. Benim kavramlar topladım ve sizler tüm noktaları üzerinden gidin ve onlarla ilgili yorum yapmak istiyorum. Bellek ayırma sorumu Sun özgü önceden söylemeliyim, yani JVM özel olduğunu bilmek geldi.

  1. Sınıflar (classloaders tarafından yüklenen) yığın üzerinde özel bir alanda git : Kalıcı bir Nesil
  2. Tüm bu bilgi ile ilgili bir ders gibi adının sınıf, Nesne dizileri asscociated ile sınıf, iç nesneleri tarafından kullanılan JVM (java/lang/Object) ve optimizasyon bilgi gider içine Kalıcı Nesil alan.
  3. Tüm statik üye değişkenleri Kalıcı Genration alanına tekrar devam etti.
  4. Gidip farklı bir yığın nesneler : Genç nesil
  5. Her yöntem her sınıfta, yöntem statik veya statik olmayan tek bir kopyası vardır. Anlaşıldı Kalıcı bir Kuşak içinde bulunmaktadır. Statik olmayan yöntemler için, tüm parametreleri ve yerel değişkenler stack üzerine gidip bu yöntem somut bir çağrı olduğunda, yeni bir yığın çerçevesi ile ilgili. Statik bir yöntem yerel değişkenlerin saklandığı emin değilim. Kalıcı Genration yığını üzerinde duruyorlar ? Ya da sadece kendi referans Kalıcı Üretimi alanında saklanır ve gerçek kopyasını başka bir yerde (Nerede ?)
  6. Ayrıca emin olduğu bir dönüş metodu mu saklı alacağım.
  7. Eğer nesneleri (genç nesil) haber için kullandıkları bir statik üyesi(kalıcı nesil), belirli bir referans için statik üye && onlar verilen yeterli bellek alanı için mağaza yöntemin dönüş türü,vb.

- Bu gece için teşekkür ederim !

CEVAP
3 EKİM 2010, Pazar


Size açık olmalıdır ilk olarak, şimdiye kadar ilk elden bilgi bu cevapları teyit edebilecek çok az insan vardır. Çok az insan son Noktasal Jvm'ler üzerinde çalışmış veya derinliği gerçekten bilmek gerekli okudu. Burada çoğu insan (ben de dahil) olayla ilgisi var ne başka bir yerde, ya da yazılı gördükleri şeylere göre cevap veriyor. Genellikle burada yazılmış, ya da çeşitli makaleler ve web sayfaları, ya da kesin olmayan diğer kaynaklara dayanmaktadır. Genellikle basitleştirilmiş, eksik ya da sadece düz yanlış.

Eğer cevaplar kesin onay istiyorsan, gerçekten indirmek için OpenJDK yaptırıyor ... vekendi araştırma yapmakokuma ve kaynak kodu anlayarak. Bu YÜZDEN soru sormadan, ya da rastgele bir web makaleler aracılığıyla trol ses akademik bir araştırma tekniği değildir.

Bunu söyledikten sonra ...

1) Sınıflar (classloaders tarafından yüklenen) yığın üzerinde özel bir alanda git : Kalıcı bir Nesil.

Bildiğim kadarıyla Evet. (GüncellemeJava 8, orada farklı permgen bir yığın değildir.)

2) Tüm bilgiler ile ilgili bir ders gibi adının sınıf, Nesne dizileri asscociated ile sınıf, iç nesneleri tarafından kullanılan JVM (java/lang/Object) ve optimizasyon bilgi gider içine Kalıcı Nesil alan.

Daha fazla veya daha az, Evet. Bunlardan bazıları tarafından ne demek emin değilim. "İç nesneleri JVM (java/lang/Object gibi) tarafından kullanılan" JVM-iç sınıf tanımlayıcıları anlamına gelir. tahminimce

3) Tüm statik üye değişkenleri Kalıcı bir üretim alanı tekrar devam etti.

Değişkenleri kendilerini Evet. Bu değişkenler (Java değişkenleri gibi) ya da ilkel değerler veya nesne başvurularını yapacak. Statik üye değişkenleri permgen öbek ayrılan bir çerçeve içinde olsa da, diziler değişkenleri tarafından sevk/nesneleri ayrılmış olabilirherhangi biryığın.

4) farklı bir yığın Nesneler : Genç nesil

Mutlaka değil. Büyük nesnelerolabilirdoğrudan sözleşmeli nesil içine ayrılır.

5) Her yöntem, her sınıfta, yöntem statik veya statik olmayan tek bir kopyası Vardır. Anlaşıldı Kalıcı bir Kuşak içinde bulunmaktadır.

Yöntemi kodunu başvuruyorsunuz varsayarsak, o zaman evet AFAIK. Biraz daha karmaşık olsa da olabilir. Örneğin bu kodu bayt kodu var ve JVM hayatı boyunca farklı zamanlarda/veya yerel kod formları olabilir.

... Statik olmayan yöntemler için, tüm parametreleri ve yerel değişkenleri yığının üstüne gidip bu yöntem somut bir çağrı olduğunda, yeni bir yığın çerçevesi ile ilgili.

Evet.

... Depolanan statik bir yöntem yerel değişkenler nerede emin değilim. Kalıcı Genration yığını üzerinde duruyorlar ? Ya da sadece kendi referans Kalıcı Üretimi alanında saklanır ve gerçek kopyasını başka bir yerde (Nerede ?)

Hayır. Yığın, statik olmayan yöntemler, yerel değişkenler gibi üzerinde saklanır.

6) ayrıca emin olduğum yere dönüş türü bir yöntem saklı.

Eğer ciddiysendeğer(non-void) yöntemi çağrısı tarafından döndürülen, sonra da iade edilen veya makine kayıt yığını. Eğer yığında döndü ise, bu 1 ya da iki kelime, dönüş türüne bağlı olarak alır.

7) Eğer nesne (genç nesil) haber için kullandıkları bir statik üyesi(kalıcı nesil), belirli bir referans için statik üye && onlar verilen yeterli bellek alanı için mağaza yöntemin dönüş türü,vb.

Bu yanlış (ya da en azından, açıkça kendini ifade etmek değildir).

Eğer bazı yöntem, statik bir üye değişkeni erişirse, onu alır ne ilkel bir değeri veya bir nesne değilbaşvuru. Bu olabilir atanan bir (mevcut) yerel bir değişken veya parametre, atanan bir (mevcut) statik veya statik olmayan üye, atanan bir (mevcut) eleman önceden ayrılmış bir dizi, ya da sadece kullanılan ve atılır.

  • Hiçbir durumda yokyenidepolama ya da bir başvuru ya da ilkel bir değeri tutmak için ayrılan gerekir.

  • Genellikle, bellek bir kelime, bir nesne ya da dizi başvurusu saklamak için gerekli olan tek şeydir, ve ilkel bir değer genellikle bir veya iki kelime, donanım mimarisi bağlı olarak kaplar.

  • - Bazı nesne / dizi yöntemi tarafından döndürülen tutmak için arayan tarafından tahsis edilecek bir yer lazım. Java nesneleri ve diziler her zaman-by pass-değer mantığı kullanarak iade edilir ... ama bu değer, nesne ya da dizi bir başvuru döndürülür.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Alfredo Garcia

    Alfredo Garc

    25 Mayıs 2007
  • Techmoan

    Techmoan

    31 Mayıs 2009
  • thenewboston

    thenewboston

    4 ŞUBAT 2008