Generasi permanen itu spesial karena menyimpan meta-data yang mendeskripsikan kelas pengguna (kelas yang bukan bagian dari bahasa Java). Contoh dari meta-data tersebut adalah objek yang mendeskripsikan kelas dan metode, dan mereka disimpan di Generasi Permanen. Aplikasi dengan basis kode besar dapat dengan cepat mengisi segmen tumpukan ini yang akan menyebabkan
java.lang.OutOfMemoryError: PermGen tidak peduli seberapa tinggi -Xmx Anda dan berapa banyak memori yang Anda miliki di mesin.
Andrew, saya hanya ingin tahu tentang seberapa besar ukuran PerGen?
gks
Hanya ingin tahu apakah permgen adalah bagian dari memori heap (seperti yang dinyatakan dalam jawaban ini) atau off-heap (seperti yang dinyatakan dalam jawaban ini - stackoverflow.com/a/31103100/3061686 ).
akki
26
Perm spacedigunakan untuk menyimpan informasi untuk kelas yang dimuat dan beberapa fitur lanjutan lainnya seperti String Pool(untuk pengujian kesetaraan string yang sangat dioptimalkan), yang biasanya dibuat olehString.intern() metode. Karena aplikasi Anda (jumlah kelas) akan bertambah, ruang ini akan terisi dengan cepat, karena pengumpulan sampah di Space ini tidak terlalu efektif untuk membersihkan seperti yang diperlukan, Anda akan segera mendapatkan Out of Memory: kesalahan ruang gen perm. Setelah itu, tidak ada aplikasi yang akan berjalan pada mesin itu secara efektif bahkan setelah JVM kosong yang besar.
Sebelum memulai aplikasi Anda, Anda harus java -XX:MaxPermSizemenyingkirkan kesalahan ini.
Perm Gen adalah singkatan dari generasi permanen yang menyimpan informasi meta-data tentang kelas.
Misalkan jika Anda membuat nama kelas A, variabel instansinya akan disimpan dalam memori heap dan kelas A bersama dengan classloader statis akan disimpan dalam generasi permanen.
Pengumpul sampah akan kesulitan mengosongkan atau mengosongkan ruang memori yang disimpan dalam memori generasi permanen. Oleh karena itu, selalu disarankan untuk menjaga pengaturan memori permgen pada batas yang disarankan.
JAVA8 telah memperkenalkan konsep yang disebut generasi meta-space, sehingga permgen tidak lagi diperlukan jika Anda menggunakan versi jdk 1.8.
Ruang permgen selalu dikenal sebagai area metode. Ketika subsistem pemuat kelas akan memuat file kelas (kode byte) ke area metode (permGen). Ini berisi semua metadata kelas misalnya: Nama kelas Anda yang sepenuhnya memenuhi syarat, Nama kelas induk langsung yang memenuhi syarat sepenuhnya, info variabel, info konstruktor, informasi kumpulan konstan, dll.
Apa yang ada di bawah PremGen: Area Kelas berada di bawah area PremGen. Bidang statis juga dikembangkan pada waktu pemuatan kelas, sehingga juga ada di PremGen. Area Pool Konstan memiliki semua bidang tetap yang dikumpulkan seperti String disimpan di sini. Selain itu, data kelas yang dimuat oleh pemuat kelas, array Objek, objek internal yang digunakan oleh jvm juga ditempatkan.
PermGen Space adalah singkatan dari alokasi memori untuk generasi permanen. Semua objek Java yang tidak dapat diubah termasuk dalam kategori ini, seperti Stringyang dibuat dengan literal atau dengan String.intern()metode dan untuk memuat kelas ke dalam memori. PermGen Space mempercepat pencarian persamaan String kami.
Jawaban:
Itu singkatan dari generasi permanen :
sumber
Perm space
digunakan untuk menyimpan informasi untuk kelas yang dimuat dan beberapa fitur lanjutan lainnya sepertiString Pool
(untuk pengujian kesetaraan string yang sangat dioptimalkan), yang biasanya dibuat olehString.intern()
metode. Karena aplikasi Anda (jumlah kelas) akan bertambah, ruang ini akan terisi dengan cepat, karena pengumpulan sampah di Space ini tidak terlalu efektif untuk membersihkan seperti yang diperlukan, Anda akan segera mendapatkan Out of Memory: kesalahan ruang gen perm. Setelah itu, tidak ada aplikasi yang akan berjalan pada mesin itu secara efektif bahkan setelah JVM kosong yang besar.Sebelum memulai aplikasi Anda, Anda harus
java -XX:MaxPermSize
menyingkirkan kesalahan ini.sumber
Jawaban sederhana (dan terlalu disederhanakan): di sinilah jvm menyimpan data pembukuannya sendiri, bukan data Anda.
sumber
Perm Gen adalah singkatan dari generasi permanen yang menyimpan informasi meta-data tentang kelas.
sumber
Ruang permgen adalah area heap yang menampung semua data reflektif dari mesin virtual itu sendiri, seperti objek class dan metode.
sumber
Ini memegang hal-hal seperti definisi kelas, kumpulan string, dll. Saya kira Anda bisa menyebutnya meta-data.
sumber
Ruang permgen selalu dikenal sebagai area metode. Ketika subsistem pemuat kelas akan memuat file kelas (kode byte) ke area metode (permGen). Ini berisi semua metadata kelas misalnya: Nama kelas Anda yang sepenuhnya memenuhi syarat, Nama kelas induk langsung yang memenuhi syarat sepenuhnya, info variabel, info konstruktor, informasi kumpulan konstan, dll.
sumber
Apa yang ada di bawah PremGen: Area Kelas berada di bawah area PremGen. Bidang statis juga dikembangkan pada waktu pemuatan kelas, sehingga juga ada di PremGen. Area Pool Konstan memiliki semua bidang tetap yang dikumpulkan seperti String disimpan di sini. Selain itu, data kelas yang dimuat oleh pemuat kelas, array Objek, objek internal yang digunakan oleh jvm juga ditempatkan.
sumber
PermGen Space adalah singkatan dari alokasi memori untuk generasi permanen. Semua objek Java yang tidak dapat diubah termasuk dalam kategori ini, seperti
String
yang dibuat dengan literal atau denganString.intern()
metode dan untuk memuat kelas ke dalam memori. PermGen Space mempercepat pencarian persamaan String kami.sumber
sumber