PermGen'in ne olduğunu, ne için kullanıldığını, neden başarısız olduğunu, nasıl artırılacağını vb. Biliyorum.
Bilmediğim şey, PermGen'in gerçekte ne anlama geldiği. Kalıcı ... Gen ... bir şey?
PermGen'in gerçekte ne anlama geldiğini bilen var mı?
PermGen'in ne olduğunu, ne için kullanıldığını, neden başarısız olduğunu, nasıl artırılacağını vb. Biliyorum.
Bilmediğim şey, PermGen'in gerçekte ne anlama geldiği. Kalıcı ... Gen ... bir şey?
PermGen'in gerçekte ne anlama geldiğini bilen var mı?
Yanıtlar:
Kalıcı Nesil. Detaylar elbette uygulamaya özeldir.
Kısaca, sınıflar ve dahili dizeler ile ilişkili Java nesnelerini içerir. Sun'ın paylaşım açık olan istemci uygulamasında classes.jsa
, bellek eşlemesi ilk verileri oluşturmak için yaklaşık yarısı salt okunur ve yarısı yazılırken kopyalama ile eşleştirilir.
Yalnızca eski olan Java nesneleri Tenured Generation'da tutulur.
PermGen, JVM tarafından yüklenen sınıfları tutmak için kullanılır. Şunları kullanarak artırabilirsiniz:
-XX:MaxPermSize=384m
Sun JVM veya OpenJDK kullanıyorsanız.
Bu nedenle, bir OutOfMemoryException: PermGen alırsanız, ya PermGen'i büyütmeniz gerekir ya da sınıf yükleyici problemleriniz olabilir.
Kalıcı Nesil. Çöp toplayıcı hakkında daha fazla ayrıntı için java GC ayarlama kılavuzuna bakın .
Orijinal soruyla gerçekten alakalı değil, ancak birisi bunu faydalı bulabilir. PermGen, Java'nın sınıflarını tuttuğu bellekte gerçekten bir alandır. Yani, çoğumuz, örneğin çok sayıda sınıf olsaydı, PermGen'de OOM ile karşılaştık.
Java 8'den bu yana, PermGen alanı, daha verimli ve varsayılan olarak sınırsız olan (veya daha kesin olarak - 32 veya 64 bit jvm ve işletim sistemi sanal bellek kullanılabilirliğine bağlı olarak yerel bellek miktarı ile sınırlı) MetaSpace alanı ile değiştirildi. Bununla birlikte, örneğin alan için bir maksimum sınır belirleyerek, bazı şekillerde ayarlamak mümkündür. Bu blog gönderisinde daha yararlı bilgiler bulabilirsiniz .
PermGen, Kalıcı Üretim anlamına gelir .
İşte DDJ hakkında kısa bir tanıtım
Permgen, Kalıcı Nesil anlamına gelir. JVM bellek alanlarından biridir. MaxPermSize adlı bir bayrak kullanarak Heap'in sabit boyutlu bir parçasıdır.
Neden "PermGen" adı?
Bu permgen Java'nın ilk günlerinde adlandırıldı. Permgen ana şebekesi, yüklenen sınıfların tüm meta verilerini tutar. Ancak sorun şu ki, bir sınıf yüklendiğinde, JVM kapanana kadar JVM'de kalacaktır. Yani permgen adı bunu tercih ediyor. Ancak daha sonra, sınıfların dinamik yüklenmesi gündeme geldi ancak isim değişmedi. Ancak Java 8 ile bu sorunu da ele aldılar. Şimdi permagen olarak değiştirildi MetaSpace dinamik hafıza boyutu ile.