Secara khusus, mengapa itu membantu untuk memperbaiki masalah PermGen OutOfMemoryError?
Juga, poin bonus untuk jawaban yang mengarahkan saya ke dokumentasi tentang argumen JVM ...
Secara khusus, mengapa itu membantu untuk memperbaiki masalah PermGen OutOfMemoryError?
Juga, poin bonus untuk jawaban yang mengarahkan saya ke dokumentasi tentang argumen JVM ...
Jawaban:
Ruang permanen adalah tempat kelas, metode, string yang diinternalisasi, dan objek serupa yang digunakan oleh VM disimpan dan tidak pernah dialokasikan (karena itu namanya).
Artikel Oracle ini secara ringkas menyajikan kerja dan parameterisasi dari HotSpot GC dan menyarankan Anda untuk menambah ruang ini jika Anda memuat banyak kelas (ini biasanya terjadi pada server aplikasi dan beberapa IDE seperti Eclipse):
Generasi permanen tidak memiliki dampak nyata pada kinerja pengumpul sampah untuk sebagian besar aplikasi. Namun, beberapa aplikasi secara dinamis menghasilkan dan memuat banyak kelas; misalnya, beberapa implementasi halaman JavaServer Pages (JSP). Aplikasi ini mungkin membutuhkan generasi permanen yang lebih besar untuk mengadakan kelas tambahan. Jika demikian, ukuran pembangkitan permanen maksimum dapat ditingkatkan dengan opsi baris perintah -XX: MaxPermSize =.
Perhatikan bahwa dokumentasi Oracle lainnya ini mencantumkan argumen HotSpot lainnya.
Pembaruan: Dimulai dengan Java 8, ruang permgen dan pengaturan ini hilang. Model memori yang digunakan untuk kelas dan metode yang dimuat berbeda dan tidak terbatas (dengan pengaturan default). Anda seharusnya tidak melihat kesalahan ini lagi.
-XX:PermSize -XX:MaxPermSize
digunakan untuk mengatur ukuran untuk Generasi Permanen.
Generasi Permanen: Generasi Permanen adalah tempat file kelas disimpan. Ini adalah hasil dari kelas yang dikompilasi dan halaman JSP. Jika ruang ini penuh, itu memicu Koleksi Sampah Penuh. Jika Full Garbage Collection tidak dapat membersihkan kelas lama yang tidak direferensikan dan tidak ada ruang tersisa untuk memperluas Ruang Permanen, kesalahan Out-of-Memory (OOME) dilemparkan dan JVM akan crash.
Di Java 8 parameter itu biasanya digunakan untuk mencetak pesan peringatan seperti ini:
Peringatan Java HotSpot (TM) 64-Bit Server VM: opsi abaikan MaxPermSize = 512m; dukungan telah dihapus di 8.0
Alasan mengapa Anda mendapatkan pesan ini di Java 8 adalah karena Permgen telah digantikan oleh Metaspace untuk mengatasi beberapa kelemahan PermGen (karena Anda dapat melihat sendiri, salah satu kelemahannya adalah bahwa ia memiliki ukuran tetap).
FYI: artikel tentang Metaspace: http://java-latte.blogspot.in/2014/03/metaspace-in-java-8.html