Bu argümanı görmezden gelmenin nedenleri, JDK8 için HotSpot'ta aşağıdaki dezavantajlar nedeniyle kaldırıldı
- Başlangıçta sabit boyut - ayarlanması zor.
- Dahili Hotspot türleri Java nesneleridir: Tam GC, opak, güçlü yazılmamış ve hata ayıklaması zor, gerekli meta meta verilerle hareket edebilir.
- Tüm koleksiyonları basitleştirin: Her bir koleksiyoncu için meta veriler için özel yineleyiciler
- GC duraklaması sırasında değil, aynı anda sınıf verilerini dağıtmak istiyor
- PermGen tarafından sınırlandırılan gelecekteki geliştirmeleri etkinleştir.
Kalıcı Nesil (PermGen) alanı tamamen kaldırıldı ve yerini Metaspace adlı yeni bir alan aldı. PermGen kaldırma sonuçları açıkça PermSize ve MaxPermSize JVM bağımsız değişkenleri yoksayılır ve asla bir java.lang.OutOfMemoryError: PermGen hatası almazsınız.
MetaSpace'in Avantajları
- Java Language Specification özelliğinden yararlanın: Sınıflar ve ilişkili meta veri yaşam süreleri sınıf yükleyiciyle eşleşir
- Yükleyici depolama alanı başına - Metaspace
- Yalnızca doğrusal ayırma
- Bireysel geri kazanım yok (RedefineClasses ve sınıf yükleme hatası hariç)
- GC taraması veya sıkıştırma yok
- Metaspace nesneleri için yer değiştirme yok
Metaspace Ayarlama
Maksimum metaspace boyutu -XX: MaxMetaspaceSize bayrağı kullanılarak ayarlanabilir ve varsayılan sınırsızdır, yani yalnızca sistem belleğiniz sınırdır. -XX: MetaspaceSize ayar bayrağı, ilk metaspace boyutunu tanımlar Bu bayrağı belirtmezseniz, Metaspace, çalışma zamanında uygulama talebine bağlı olarak dinamik olarak yeniden boyutlandırılır.
Değişiklik gelecekte diğer optimizasyonları ve özellikleri etkinleştirir
- Uygulama sınıfı veri paylaşımı
- Genç koleksiyon optimizasyonları, G1 sınıfı boşaltma
- Meta veri boyutu küçültme ve dahili JVM ayak izi projeleri
Geliştirilmiş GC performansı da vardır. Daha fazla detay