JDK 8'i yükledim ve Eclipse'i çalıştırmaya çalıştım. Aşağıdaki uyarı mesajını alıyorum:
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=512m;
support was removed in 8.0
Bu VM seçeneğini göz ardı etmenin nedenleri nelerdir?
JDK 8'i yükledim ve Eclipse'i çalıştırmaya çalıştım. Aşağıdaki uyarı mesajını alıyorum:
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=512m;
support was removed in 8.0
Bu VM seçeneğini göz ardı etmenin nedenleri nelerdir?
Yanıtlar:
Bu argümanı görmezden gelmenin nedenleri, JDK8 için HotSpot'ta aşağıdaki dezavantajlar nedeniyle kaldırıldı
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ı
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
Geliştirilmiş GC performansı da vardır. Daha fazla detay
JDK Geliştirme Önerileri 122'nin bir parçası olan Java 8'in yeni özelliklerinden biri :
Kalıcı nesli Hotspot JVM'den çıkarın ve böylece kalıcı neslin boyutunu ayarlama ihtiyacı.
Java 8'e eklenecek tüm JEP'lerin listesi JDK8 kilometre taşları sayfasında bulunabilir .
Kalıcı Nesil (PermGen) alanı tamamen kaldırıldı ve yerine Metaspace adı verilen yeni bir alan getirildi java.lang.OutOfMemoryError.
JDK 8 HotSpot JVM artık sınıf meta verilerinin temsili için yerel belleği kullanıyor ve Metaspace olarak adlandırılıyor. Daha Fazla Oku >>
Çünkü PermGen alanı kaldırıldı. Bellek yönetimi biraz değişti.
PermGen alanı Java 8'de MetaSpace ile değiştirilir. PermSize ve MaxPermSize JVM bağımsız değişkenleri yok sayılır ve başlangıçta varsa bir uyarı verilir.
Sınıf meta verileri için çoğu ayırma artık yerel bellekten ayrılmıştır. * Sınıf meta verilerini tanımlamak için kullanılan sınıflar kaldırılmıştır.
Eski PermGen ve yeni MetaSpace arasındaki temel fark, bellek kullanımının üst sınırını zorunlu olarak tanımlamanıza gerek olmamasıdır. MetaSpace alan sınırını sınırsız tutabilirsiniz. Böylece bellek kullanımı arttığında OutOfMemoryError hatası almayacaksınız. Bunun yerine, ayrılmış yerel bellek, bellek kullanımını artırmak için doldurulacaktır.
MetaSpace için maksimum alan sınırını tanımlayabilirsiniz ve sonra OutOfMemoryError: Metadata alanını atar. Bu nedenle, bellek israfından kaçınabilmemiz için bu limiti dikkatli bir şekilde tanımlamak önemlidir.
Oracle'ın Java 8 için JVM uygulaması PermGen modelinden kurtuldu ve Metaspace ile değiştirildi .