2012-08-24 8 views
189

Özellikle, bir PermGen OutOfMemoryError sorununun düzeltilmesine neden yardımcı olur?-XX: MaxPermSize ne yapar?

Ayrıca

, JVM argümanlar üzerinde belgelere beni işaret eden bir cevap için bonus puan ...

+0

http://mark.koli.ch/2009/01/understanding-javas-perm-gen-maxpermsize-heap-space-etc.html –

+5

http://www.oracle.com/technetwork/java/javase /tech/vmoptions-jsp-140102.html Şimdi bana şu bonus puanları nasıl vereceksin?:) –

+1

@PaulTomblin Bağlama yaptığınız makalenin (Google'ın ilk sonucu) söylediklerine dair bir fikri olduğundan emin değilim. –

cevap

207

sınıflar, yöntemler, VM tarafından kullanılan içselleştirilmiş dizeleri ve benzeri nesnelerin saklandığı yerde kalıcı bir alandır ve asla ayrılmamış (bundan dolayı isim).

This Oracle article özlü HotSpot GC çalışma ve parametreleştirmeyi sunar ve birçok sınıfları yüklemek eğer (bu tipik uygulama sunucuları için geçerlidir ve Eclipse gibi bazı IDE) bu alanı genişletmek için tavsiyede:

Kalıcı jenerasyon, çoğu uygulama için çöp toplayıcı performansında dikkate değer bir etkiye sahip değildir. Ancak, bazı uygulamaları dinamik olarak birçok sınıf oluşturup yükler; Örneğin, JavaServer Pages (JSP) sayfalarının bazı uygulamaları. Bu uygulamalarının ek sınıflarını tutmak için daha büyük bir kalıcı nesle gereksinimi olabilir. Eğer öyleyse, maksimum kalıcı üretim boyutu , -XX: MaxPermSize = komut satırı seçeneği ile artırılabilir.

this other Oracle documentation'un diğer HotSpot bağımsız değişkenlerini listelediğini unutmayın.

Güncelleme: Java 8 ile başlayarak, hem permgen alanı hem de bu ayar silinir. Yüklenen sınıflar ve yöntemler için kullanılan bellek modeli farklı ve sınırlı değil (varsayılan ayarlarla). Bu hatayı artık görmemelisiniz.

75

-XX: PermSize -XX: MaxPermSize Kalıcı Nesil boyutlarını 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 Koleksiyonunu tetikler. Tam Çöp Toplama, eski ilgisiz sınıfları temizleyemezse ve Kalıcı Alanı genişletecek bir yer kalmazsa, Bir Bellek Eksikliği (OOME) atılır ve JVM çökecektir.

parametre yaygın gibi bir uyarı mesajı yazdırmak için kullanıldığını Java 8'de
+9

+1. – Tony

35

bu bir:

Java HotSpot (TM) 64-bit sunucu VM uyarısı: seçeneği görmezden MaxPermSize = 512; destek

8.0'da çıkarıldı

PermGen kendiniz için görmek mümkün olduğu gibi, bu sakıncaları biridir PermGen en sakıncaları bazıları (ele Metaspace almıştır çünkü Java 8'de bu mesajı almak nedeni budur sabit bir boyuta sahipti).

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

+2

Ayrıca bakınız: [JDK 8'deki PermGen eliminasyonu] (http://stackoverflow.com/questions/18339707/permgen-elimination-in-jdk-8) (stackoverflow). – will

1

MaxPermSize sürekli kuşak yığını için maksimum boyutu, sınıfların bayt kodu tutar ve gerçek örneklerini içeren bir amacı yığın ayrı tutulur bir yığın.