Java Permgen ve Metaspace Nedir?

Permgen Nedir?

Pemgen (Permanent Generation) Java Heap altında JVM tarafından yönetilen özel bir bellek alanıdır. Pemgen bellek alanında tüm static tanımlamalar tutulur buna ek olarak meta datalarıda (ihtiyaç duyulan verilerin indexi gibi düşünülebilir) bu alan içerisinde tutulurdu, bu alanın boyutu  32 bit JVM’de 64 MB ve 64 bit sürümde 82 MB olarak sınırlandırılmıştı. Sınırlandırılmış bu alanı temizleyebilmek için sıkça garbage collection çalışması gerekmekteydi. Garbage collection’ın çalışması ve bu alanı temizlemeye yetmemesi durumunda ise “OutOfMemoryError” hataları ile karşılaşılmaktaydı.

Pemgen alanı PermSize ve MaxPermSize JVM parametreleri ile ayarlanabilmektedir fakat bu dinamik olarak gerçekleştirilememekte bu yüzden sürekli olarak uygulamanın takip edilmesini gerektirmekteydi.

(Büyük bir Permgen alanı belirlemek gerek garbage collection’ın daha uzun süre çalışacak olması gerekse bu alandaki metadata verisine olan erişimi yavaşlatabileceği gerekcesiyle iki ucu keskin bir değnek durumundadır.)

JDK 8 ile birlikte bu alan kaldırılmış ve yerine MetaSpace getirilmiştir, bu sayede bir çok memory leak veya OutOfMemory hatalarının da önüne geçilmiş oldu.

MetaSpace Nedir?

JDK 8 ile birlikte gelen ve Permgen’in yerini alan yapıdır. Permgen de var olan bellek alanı yönetimi geliştirildi, belleğe yüklenen static veriler veya metadata’lara otomatik olarak ölçeklenebilen bir yapı haline geldi, alanın tamamen dolması durumunda Garbage collection’ını otomatik tetikleyen bir yapı eklendi ve Garbage collection daha verimli hale geldi.