Saya telah menginstal JDK 8 dan mencoba menjalankan Eclipse. Saya menerima pesan peringatan berikut:
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=512m;
support was removed in 8.0
Apa alasan untuk mengabaikan opsi VM ini?
Jawaban:
Alasan mengabaikan argumen ini adalah generasi permanen telah dihapus di HotSpot untuk JDK8 karena kelemahan berikut
Ruang Generasi Permanen (PermGen) telah sepenuhnya dihapus dan semacam digantikan oleh ruang baru yang disebut Metaspace. Konsekuensi dari penghapusan PermGen adalah bahwa jelas argumen PermSize dan MaxPermSize JVM diabaikan dan Anda tidak akan pernah mendapatkan java.lang.OutOfMemoryError: PermGen error.
Keuntungan dari MetaSpace
Tuning Metaspace
Ukuran metaspace maksimum dapat diatur menggunakan flag -XX: MaxMetaspaceSize, dan standarnya tidak terbatas, yang berarti hanya memori sistem Anda yang menjadi batasnya. The -XX: Flag tuning MetaspaceSize menentukan ukuran awal metaspace Jika Anda tidak menentukan flag ini, Metaspace akan secara dinamis mengubah ukuran tergantung dari permintaan aplikasi saat runtime.
Perubahan memungkinkan pengoptimalan dan fitur lainnya di masa mendatang
Ada peningkatan kinerja GC juga. Lebih detail
sumber
Ini adalah salah satu fitur baru Java 8, bagian dari JDK Enhancement Proposals 122 :
Daftar semua JEP yang akan dimasukkan dalam Java 8 dapat ditemukan di halaman tonggak JDK8 .
sumber
Ruang Permanent Generation (PermGen) telah sepenuhnya dihapus dan semacam digantikan oleh ruang baru yang disebut Metaspace. Konsekuensi dari penghapusan PermGen adalah bahwa jelas argumen JVM PermSize dan MaxPermSize diabaikan dan Anda tidak akan pernah mendapatkan
java.lang.OutOfMemoryError
: Kesalahan PermGen. JDK 8 HotSpot JVM sekarang menggunakan memori asli untuk representasi metadata kelas dan disebut Metaspace. Baca Lebih Lanjut >>sumber
Karena ruang PermGen telah dihapus. Manajemen memori telah berubah sedikit.
java-8-permgen-metaspace
sumber
Ruang PermGen digantikan oleh MetaSpace di Java 8. Argumen PermSize dan MaxPermSize JVM diabaikan dan peringatan dikeluarkan jika hadir saat start-up.
Sebagian besar alokasi untuk metadata kelas sekarang dialokasikan dari memori asli. * Kelas yang digunakan untuk menggambarkan metadata kelas telah dihapus.
Perbedaan utama antara PermGen lama dan MetaSpace baru adalah, Anda tidak harus menentukan batas atas penggunaan memori. Anda dapat menjaga batas ruang MetaSpace tidak terbatas. Jadi ketika penggunaan memori meningkat Anda tidak akan mendapatkan kesalahan OutOfMemoryError. Alih-alih memori asli yang dicadangkan ditingkatkan untuk memenuhi peningkatan penggunaan memori.
Anda dapat menentukan batas maksimum ruang untuk MetaSpace, dan kemudian akan membuang OutOfMemoryError: ruang Metadata. Oleh karena itu penting untuk mendefinisikan batas ini dengan hati-hati, sehingga kita dapat menghindari pemborosan memori.
sumber
Implementasi JVM Oracle untuk Java 8 menyingkirkan model PermGen dan menggantinya dengan Metaspace .
sumber