Saat belajar tentang pembuatan profil memori java, saya terus melihat istilah "perm space" selain "heap." Saya tahu apa itu heap - apa perm space?
Saat belajar tentang pembuatan profil memori java, saya terus melihat istilah "perm space" selain "heap." Saya tahu apa itu heap - apa perm space?
Jawaban:
Itu singkatan dari generasi permanen :
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.
Perm space
digunakan 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:MaxPermSize
menyingkirkan kesalahan ini.
Perm Gen adalah singkatan dari generasi permanen yang menyimpan informasi meta-data tentang kelas.
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 String
yang dibuat dengan literal atau dengan String.intern()
metode dan untuk memuat kelas ke dalam memori. PermGen Space mempercepat pencarian persamaan String kami.