Perşembe, Ekim 07, 2010

"java.lang.OutOfMemoryError: PermGen space" Hatası

Uzun bir aradan sonra tekrar merhaba. Askerden döner dönmez eclipse'imin bana küçük bir hediyesi işte bu hata oldu. Bunu sizinle de paylaşmak istedim.

Birçoğumuz OutOfMemory hatasını çeşitli tiplerde almışızdır. Bunların en sık olanı "Exception in thread "main" java.lang.OutOfMemoryError: Java heap space" hatasıdır ki; Xmx ile belirtilen heap boyutu aşıldığını gösteriyor. Bunun dışında daha az karşılaşılan ve yazımızın konusu olan "java.lang.OutOfMemoryError: PermGen space" hatası var ki bunu anlamak için java Garbage Collection ın nasıl çalıştığını bilmek gerekiyor.

Daha verimli çöp toplama ve optimizasyonu daha iyi yapmak için java memory alanı(Java heap) nesiller halinde yönetilir. GC algoritması her nesil için farklı farklı çalışır. Bunlardan en uzun süre yaşayan nesil yukarıdaki hatayla ilgili olan nesil "Permanent Generation" dır. Bu nesildeki classlar kullanıcı bilgilerini tutan meta-data classlarıdır. Büyük çaplı uyugulamar rahatlıkla bu segmenti doldurabiler.

Sun JVM her neslin tutulduğu segmentin boyutunu ayarlama imkanı verir. Permanent generation ın başlangıç ve maks boyutunu aşağıdaki gibi ayarlayabiliriz.

-XX:PermSize=64m
-XX:MaxPermSize=128m



Kendi sorunumu bu şekilde çözdüm. Eclipse için bunları eclipse.ini dosyasına eklemek yeterli olur.

Ayrıca normal "Exception in thread "main" java.lang.OutOfMemoryError: Java heap space" için aşağıdaki satırları eclipse.ini ye yerleştirmek gerekiyor;

-vmargs
-Xms128m
-Xmx512m


Tip:
Eclipse'in kullandığı argümanları görmek için Eclipse açıkken "Help>>About Eclipse>>Installation details" i takip ederek "Configuration" tabini açıp bakabilirsiniz.

Hiç yorum yok:

Yorum Gönder