Ö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 ...
Ö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 ...
Yanıtlar:
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.
-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.
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