-XX: MaxPermSize ne yapıyor?


260

Özellikle, bir PermGen OutOfMemoryError sorununu düzeltmek neden yardımcı olur?

Ayrıca, beni JVM argümanlarındaki belgelere yönlendiren bir cevap için bonus puanlar ...



6
oracle.com/technetwork/java/javase/tech/… Şimdi bana bu bonus puanlarını nasıl vereceksin? :)
Denys Séguret

1
@PaulTomblin Makalesini bağladığınız adamın (Google'ın ilk sonucu) ne hakkında konuştuğuna dair hiçbir fikre sahip olduğundan emin değilim.
Denys Séguret

@dystroy Sana bir kurabiye gönderebilir miyim? Ya da iyi cevaplanmış bir soruda tatmin olabilirsiniz;)
Geoff

5
Bu özellikle soruyu cevaplamıyor ancak JVM bellek yönetimine bakıyorsanız, üzerinde okuduğum en iyi makaleler bu ve bu infoq bağlantısı
Abe

Yanıtlar:


274

Kalıcı alan, VM tarafından kullanılan sınıfların, yöntemlerin, dahili dizelerin ve benzer nesnelerin depolandığı ve asla yeniden konumlandırılmadığı yerdir (bu nedenle ad).

Bu Oracle makalesi , HotSpot GC'nin çalışmasını ve parametrelendirilmesini kısaca sunar ve çok sayıda sınıf yüklerseniz bu alanı artırmanızı önerir (bu genellikle uygulama sunucuları ve Eclipse gibi bazı IDE'ler için geçerlidir):

Kalıcı üretimin, çoğu uygulama için çöp toplayıcı performansı üzerinde belirgin bir etkisi yoktur. Ancak, bazı uygulamalar dinamik olarak birçok sınıf oluşturur ve yükler; örneğin, JavaServer Pages (JSP) sayfalarının bazı uygulamaları. Bu uygulamalar, ek sınıfları tutmak için daha büyük bir kalıcı nesle ihtiyaç duyabilir. Öyleyse, maksimum kalıcı üretim boyutu -XX: MaxPermSize = komut satırı seçeneği ile artırılabilir.

Bu diğer Oracle belgelerinin diğer HotSpot argümanlarını listelediğini unutmayın .

Güncelleme: Java 8 ile başlayarak hem permgen alanı hem de bu ayar kaybolur. Yüklü sınıflar ve yöntemler için kullanılan bellek modeli farklıdır ve sınırlı değildir (varsayılan ayarlarla). Artık bu hatayı görmemelisiniz.


93

-XX:PermSize -XX:MaxPermSize Kalıcı Nesil için boyutu ayarlamak için kullanılır.

Kalıcı Nesil: Kalıcı Nesil, sınıf dosyalarının tutulduğu yerdir. Bunlar derlenmiş sınıfların ve JSP sayfalarının sonucudur. Bu alan doluysa, Tam Çöp Toplama'yı tetikler. Tam Çöp Toplama eski referanssız sınıfları temizleyemezse ve Kalıcı Alanı genişletmek için yer kalmazsa, Bellek Dışı hatası (OOME) atılır ve JVM kilitlenir.


48

Java 8'de bu parametre yaygın olarak aşağıdaki gibi bir uyarı mesajı yazdırmak için kullanılır:

Java HotSpot (TM) 64 Bit Sunucu VM uyarısı: yoksayma seçeneği MaxPermSize = 512m; destek 8.0 sürümünde kaldırıldı

Java 8'de bu mesajı almanızın nedeni, Permgen'in bazı PermGen dezavantajlarını gidermek için Metaspace ile değiştirilmesidir (kendiniz görebildiğiniz gibi, bu dezavantajlardan biri sabit bir boyuta sahip olmasıdır).

Bilginize: Metaspace üzerine bir makale: http://java-latte.blogspot.in/2014/03/metaspace-in-java-8.html


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.