Penghapusan permGen di JDK 8


Jawaban:


358

Alasan mengabaikan argumen ini adalah generasi permanen telah dihapus di HotSpot untuk JDK8 karena kelemahan berikut

  • Memperbaiki ukuran saat startup - sulit diatur.
  • Jenis Hotspot internal adalah objek Java: Dapat bergerak dengan GC penuh, buram, tidak diketik dengan kuat dan sulit di-debug, diperlukan meta-metadata.
  • Sederhanakan koleksi lengkap: Iterator khusus untuk metadata untuk setiap kolektor
  • Ingin membatalkan alokasi data kelas secara bersamaan dan tidak selama jeda GC
  • Aktifkan peningkatan di masa mendatang yang dibatasi oleh PermGen.

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

  • Manfaatkan properti Spesifikasi Bahasa Jawa: Kelas dan masa hidup metadata yang sesuai dengan kelas loader
  • Per area penyimpanan loader - Metaspace
  • Alokasi linier saja
  • Tidak ada reklamasi individu (kecuali untuk RedefineClasses dan kegagalan pemuatan kelas)
  • Tidak ada pemindaian GC atau pemadatan
  • Tidak ada relokasi untuk objek 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

  • Berbagi data kelas aplikasi
  • Optimalisasi koleksi muda, pembongkaran kelas G1
  • Pengurangan ukuran metadata dan proyek jejak kaki JVM internal

Ada peningkatan kinerja GC juga. Lebih detail


29
Saya harus menyebutkan bahwa string yang diinternir sebelumnya disimpan di ruang PermGen, tetapi dipindahkan ke tumpukan Jawa utama di Jawa 7.
gparyani

Terima kasih untuk penjelasan rinci.
Pradeep

3
Sedikit pengantar yang lembut untuk khalayak umum (maksud saya terutama orang-orang non-Jawa, mis. Sesama biarawan harus berurusan dengan JVM) tidak akan membahayakan dalam jawaban ini.
ulidtko


19

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 >>


3
'HotSpot JVM sekarang menggunakan memori asli untuk representasi metadata kelas. - dan memori apa yang digunakan oleh HotSpot JVM sebelumnya? Dan apa yang disebut sebagai 'memori asli'?
Andrey M. Stepanov


12

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.


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.