Perma alanı nedir?


88

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?


13
Java 8, bu kavramı tamamen kaldırdı ve Metaspace'e taşındı
pramodc84

2
Referans burada iyi bir şekilde açıklanmıştır youtube.com/watch?v=PUUJ4rNpRhU
shareef

Yanıtlar:


103

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.


Andrew, sadece PerGen'in boyutunun ne olabileceğini merak ediyorum?
gks

Sadece permgen'in yığın belleğinin bir parçası mı (bu yanıtta belirtildiği gibi) yoksa yığın dışı mı (bu yanıtta belirtildiği gibi - stackoverflow.com/a/31103100/3061686 ) olup olmadığını merak ediyorum .
akki

26

Perm space, yüklenen sınıflar ve String Poolgenellikle 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:MaxPermSizebu hatadan kurtulmalısınız.


Dize havuzu, java 7'den beri yığın alanına kaydırılıyor.
Caffeine Coder

20

Basit (ve aşırı basitleştirilmiş) cevap: jvm, verilerinizin aksine kendi muhasebe verilerini sakladığı yerdir.


17

Perm Gen, sınıflar hakkında meta veri bilgilerini tutan kalıcı nesil anlamına gelir.

  1. Bir sınıf adı A oluşturursanız, bunun örnek değişkeninin yığın belleğinde saklanacağını ve statik sınıf yükleyicilerle birlikte A sınıfı kalıcı üretimde depolanacağını varsayalım.
  2. Çöp toplayıcılar, kalıcı oluşturma belleğinde depolanan bellek alanını temizlemeyi veya boşaltmayı zor bulacaktır. Bu nedenle, permgen bellek ayarlarının her zaman tavsiye edilen sınırda tutulması önerilir.
  3. JAVA8, meta-space generation adlı kavramı tanıttı, bu nedenle jdk 1.8 sürümlerini kullandığınızda permgen'e artık ihtiyaç duyulmaz.

5

Permgen alanı, sınıf ve yöntem nesneleri gibi sanal makinenin tüm yansıtıcı verilerini tutan yığın alanıdır.


3

Sınıf tanımları, dizgi havuzu, vb. Gibi şeyleri tutar. Sanırım buna meta-veri diyebilirsiniz.


3

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.


2

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.


1

PermGen Space, Kalıcı nesil için bellek tahsisi anlamına gelir Tüm Java değişmez nesneleri, Stringdeğ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.


1
  • JVM, Java nesnelerinin dahili bir temsiline sahiptir ve bu dahili temsiller yığında depolanır (genç kuşakta veya görev süresi olan kuşakta).
  • JVM ayrıca Java sınıflarının dahili bir temsiline sahiptir ve bunlar kalıcı nesilde saklanır

görüntü açıklamasını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.