Java bellek profilini öğrenirken, "yığın" ın yanı sıra "kalıcı alan" terimini de görüyorum. Yığının ne olduğunu biliyorum - kalıcı alan nedir?
Java bellek profilini öğrenirken, "yığın" ın yanı sıra "kalıcı alan" terimini de görüyorum. Yığının ne olduğunu biliyorum - kalıcı alan nedir?
Yanıtlar:
Kalıcı nesil anlamına gelir :
Kalıcı nesil özeldir çünkü kullanıcı sınıflarını (Java dilinin parçası olmayan sınıflar) tanımlayan meta verileri tutar. Bu tür meta-verilerin örnekleri, sınıfları ve yöntemleri tanımlayan nesnelerdir ve bunlar Kalıcı Nesil içinde saklanır. Büyük kod tabanına sahip uygulamalar, yığının bu bölümünü hızla doldurabilir, bu da
java.lang.OutOfMemoryError
şunlara neden olur : -Xmx'iniz ne kadar yüksek olursa olsun ve makinede ne kadar belleğiniz olursa olsun, PermGen.
Perm space
, yüklenen sınıflar ve String Pool
genellikle String.intern()
yöntemler tarafından oluşturulan (yüksek düzeyde optimize edilmiş dizi eşitliği testi için) gibi diğer birkaç gelişmiş özellik için bilgileri saklamak için kullanılır. Uygulamanız (sınıf sayısı) artacağından, bu alan hızla doldurulacaktır, çünkü bu Alan üzerindeki çöp toplama işlemi gerektiği gibi temizlemek için çok etkili olmadığından, hızlı bir şekilde Bellek Yetersiz: kalıcı alan hatası alırsınız. Bundan sonra, büyük bir boş JVM'ye sahip olduktan sonra bile o makinede hiçbir uygulama etkin bir şekilde çalışmayacaktır.
Uygulamanıza başlamadan önce java -XX:MaxPermSize
bu hatadan kurtulmalısınız.
Perm Gen, sınıflar hakkında meta veri bilgilerini tutan kalıcı nesil anlamına gelir.
Permgen alanı her zaman yöntem alanı olarak bilinir.Sınıf yükleyici alt sistemi sınıf dosyasını (bayt kodu) yöntem alanına (permGen) yükleyeceği zaman. Tüm sınıf meta verilerini içerir, örneğin: Sınıfınızın tam adı, Hemen üst sınıfın tam adı, değişken bilgisi, kurucu bilgisi, sabit havuz bilgisi vb.
PremGen altında bulunanlar: Class Area, PremGen alanı altında gelir. Statik alanlar da sınıf yükleme zamanında geliştirilir, bu nedenle PremGen'de de bulunurlar. String gibi havuzlanmış tüm değişmez alanların bulunduğu Sabit Havuz alanı burada tutulur. Buna ek olarak, sınıf yükleyiciler tarafından yüklenen sınıf verileri, Nesne dizileri, jvm tarafından kullanılan dahili nesneler de bulunur.
PermGen Space, Kalıcı nesil için bellek tahsisi anlamına gelir Tüm Java değişmez nesneleri, String
değişmez değerlerle veya String.intern()
yöntemlerle oluşturulanlar ve sınıfları belleğe yüklemek gibi bu kategoriye girer. PermGen Space, String eşitliği aramamızı hızlandırır.