Saya mencoba memahami Apa konsep generasi muda , tua dan permanen dalam terminologi tumpukan Jawa, dan lebih khusus interaksi antara tiga generasi.
Pertanyaan saya adalah:
- Apa itu generasi muda?
- Apa itu generasi lama?
- Apa itu generasi permanen?
- Bagaimana ketiga generasi berinteraksi / berhubungan satu sama lain?
Jawaban:
Ini sepertinya kesalahpahaman umum. Dalam JVM Oracle, generasi permanen bukan bagian dari heap. Ini adalah ruang terpisah untuk definisi kelas dan data terkait. Di Jawa 6 dan sebelumnya, string yang diinternir juga disimpan dalam generasi permanen. Di Java 7, string yang diinternir disimpan di tumpukan objek utama.
Ini adalah pos yang bagus untuk generasi permanen .
Saya suka deskripsi yang diberikan untuk setiap ruang dalam panduan Oracle di JConsole :
Java menggunakan pengumpulan sampah generasi. Ini berarti bahwa jika Anda memiliki objek foo (yang merupakan turunan dari beberapa kelas), semakin banyak peristiwa pengumpulan sampah yang bertahan (jika masih ada referensi untuknya), semakin dipromosikan. Ini dimulai pada generasi muda (yang dengan sendirinya terbagi menjadi beberapa ruang - Eden dan Survivor) dan pada akhirnya akan berakhir pada generasi masa jabatan jika bertahan cukup lama.
sumber
Generasi Muda : Ini adalah tempat tinggal untuk waktu singkat dan dibagi menjadi dua ruang:
Old Generation : Pool ini pada dasarnya berisi ruang bertenor dan virtual (dilindungi) dan akan menampung benda-benda yang selamat setelah pengumpulan sampah dari Young Generation.
Generasi Permanen: Kumpulan memori ini seperti namanya juga berisi metadata kelas permanen dan informasi deskriptor sehingga ruang PermGen selalu disediakan untuk kelas dan yang terkait dengan kelas misalnya anggota statis.
Kode Cache (Virtual atau disediakan): Jika Anda menggunakan HotSpot Java VM ini termasuk area cache kode yang berisi memori yang akan digunakan untuk kompilasi dan penyimpanan kode asli.
Kesopanan
sumber
The Generasi Muda adalah di mana semua benda baru dialokasikan dan umur. Ketika generasi muda terisi, ini menyebabkan pengumpulan sampah kecil. Generasi muda yang penuh dengan benda mati dikumpulkan dengan sangat cepat. Beberapa benda yang selamat berumur dan akhirnya pindah ke generasi tua.
The Generation Old digunakan untuk menyimpan panjang yang masih hidup objek. Biasanya, ambang batas ditetapkan untuk objek generasi muda dan ketika usia tersebut terpenuhi, objek akan dipindahkan ke generasi lama. Akhirnya generasi tua perlu dikumpulkan. Acara ini disebut pengumpulan sampah besar
The generasi Permanen berisi metadata yang dibutuhkan oleh JVM untuk menggambarkan kelas dan metode yang digunakan dalam aplikasi. Generasi permanen diisi oleh JVM saat runtime berdasarkan kelas yang digunakan oleh aplikasi.
PermGen telah diganti dengan Metaspace sejak rilis Java 8.
Parameter PermSize & MaxPermSize akan diabaikan sekarang
Artikel tutorial sumber tehnik & oracle: http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html
" Proses Pengumpulan Sampah Umum " dalam artikel di atas menjelaskan interaksi di antara mereka dengan banyak diagram.
Lihatlah diagram ringkasan:
sumber
Mesin virtual Java disusun dalam tiga generasi: generasi muda, generasi tua, dan generasi permanen. Sebagian besar objek pada awalnya dialokasikan pada generasi muda. Generasi lama berisi benda-benda yang selamat dari sejumlah koleksi generasi muda, serta beberapa benda besar yang dapat dialokasikan langsung di generasi lama. Generasi permanen memiliki objek yang menurut JVM nyaman untuk dikelola oleh pengumpul sampah, seperti objek yang menggambarkan kelas dan metode, serta kelas dan metode itu sendiri.
sumber
Memori dalam SunHotSpot JVM diatur menjadi tiga generasi: generasi muda, generasi tua dan generasi permanen.
FYI: Gen permanen tidak dianggap sebagai bagian dari heap Java.
Bagaimana ketiga generasi berinteraksi / berhubungan satu sama lain? Objek (kecuali yang besar) pertama-tama dialokasikan untuk generasi muda. Jika suatu benda tetap hidup setelah x tidak. dari siklus pengumpulan sampah yang dipromosikan ke gen lama / bertenor. Oleh karena itu kita dapat mengatakan bahwa gen muda mengandung benda berumur pendek sedangkan gen tua mengandung benda yang memiliki umur panjang. Gen permanen tidak berinteraksi dengan dua generasi lainnya.
sumber