Catatan Pembelajaran JVM: Manajemen Memori JVM dan Konsep Koleksi Sampah JVM. Struktur memori JVM terdiri dari tumpukan, tumpukan, tumpukan metode lokal, area metode dan bagian lainnya. Selain itu, JVM menggunakan mekanisme pengumpulan sampah yang berbeda untuk alamat unduhan generasi baru dan generasi lama masing -masing.
Pertama, mari kita lihat struktur memori JVM, yang terdiri dari tumpukan, tumpukan, tumpukan metode lokal, area metode dan bagian lainnya. Diagram struktur ditunjukkan di bawah ini.
Catatan Pembelajaran JVM Manajemen Memori JVM dan Koleksi Sampah JVM
Struktur memori JVM
Struktur memori JVM terdiri dari tumpukan, tumpukan, tumpukan metode lokal, area metode dan bagian lainnya. Diagram struktur adalah sebagai berikut:
1) Tumpukan
Memori semua objek yang dibuat oleh baru dialokasikan dalam tumpukan, dan ukurannya dapat dikontrol oleh -xmx dan -xms. Tumpukan dibagi menjadi ceponim dan generasi lama, dan ceponim selanjutnya dibagi menjadi zona Eden dan Survivor. Akhirnya, Survivor terdiri dari Fromspace dan Tospace. Diagram struktur adalah sebagai berikut:
Generasi baru. Objek baru dialokasikan memori oleh generasi baru. Ketika Eden tidak mencukupi, benda -benda yang masih hidup akan ditransfer ke Survivor. Ukuran generasi baru dapat dikontrol oleh -xmn, atau -xx: Survivorratio dapat digunakan untuk mengontrol rasio Eden dan Survivor. Digunakan untuk menyimpan benda -benda yang telah bertahan beberapa koleksi sampah di generasi baru.
2) Tumpukan
Ketika setiap utas menjalankan setiap metode, itu akan berlaku untuk bingkai tumpukan di tumpukan. Setiap bingkai tumpukan mencakup area variabel lokal dan tumpukan operan, yang digunakan untuk menyimpan variabel sementara, parameter dan hasil menengah selama panggilan metode ini.
3) Tumpukan metode lokal
Digunakan untuk mendukung pelaksanaan metode asli, menyimpan status setiap panggilan metode asli
4) Area metode
Menyimpan informasi kelas yang akan dimuat, variabel statis, dan konstanta jenis akhir, atribut dan informasi metode. JVM menggunakan PermanetGeneration untuk menyimpan area metode, dan nilai minimum dan maksimum dapat ditentukan oleh -xx: Permsize dan -xx: Maxpermsize. Setelah memperkenalkan struktur memori JVM, mari kita lihat alamat unduhan mekanisme pengumpulan sampah JVM.
Mekanisme pengumpulan sampah jvm
JVM mengadopsi berbagai mekanisme pengumpulan sampah untuk generasi baru dan lama
Generasi baru GC:
Ceponim biasanya memiliki waktu bertahan hidup yang singkat, sehingga didaur ulang berdasarkan algoritma penyalinan. Algoritma penyalinan yang disebut adalah memindai benda-benda yang masih hidup dan menyalinnya ke ruang baru yang sama sekali tidak digunakan, sesuai dengan Ceponim, yaitu menyalin antara Eden dan Fromspace atau Tospace. Generasi baru menggunakan pointer idle untuk mengontrol pemicu GC. Pointer menyimpan objek yang dialokasikan terakhir dalam interval generasi baru. Ketika ada objek baru untuk mengalokasikan memori, digunakan untuk memeriksa apakah ruang itu cukup. Jika tidak cukup, itu akan memicu GC. Ketika objek dialokasikan terus menerus, objek akan secara bertahap akan beralih dari Eden ke Survivor, dan akhirnya ke generasi lama.
Gunakan javavisualvm untuk melihatnya dengan jelas dan mengamati bahwa setelah generasi baru penuh, objek akan ditransfer ke generasi lama, dan kemudian jelas dan terus memuat. Ketika generasi lama penuh, pengecualian outofmemory akan dilaporkan, seperti yang ditunjukkan pada gambar di bawah ini:
Dalam hal mekanisme eksekusi, JVM menyediakan serial GC (serialGC), daur ulang paralel GC (paralelscavenge) dan paralel GC (Parnew)
1) Serial GC
Seluruh proses pemindaian dan penyalinan dilakukan dengan satu cara berulir. Ini cocok untuk aplikasi dengan CPU tunggal, ruang kecil dalam generasi baru dan persyaratan yang tidak terlalu tinggi untuk waktu jeda. Ini adalah metode GC default di tingkat klien. Ini dapat dipaksa untuk menentukannya melalui -xx:+useerialgc
2) Daur Ulang Paralel GC
Seluruh proses pemindaian dan replikasi dilakukan dengan cara multi-threaded. Ini cocok untuk multi-CPU dan aplikasi dengan persyaratan waktu jeda pendek. Ini adalah metode GC yang digunakan oleh level server secara default. Ini dapat digunakan untuk memaksa spesifikasi -xx:+useparallelgc, dan menggunakan -xx: paralelgcthreads = 4 untuk menentukan jumlah utas.
3) Paralel GC
Gunakan dengan GC bersamaan generasi lama
GC Generasi Tua:
Berbeda dari generasi baru, objek bertahan untuk waktu yang lama dan relatif stabil. Oleh karena itu, algoritma tanda digunakan untuk mendaur ulang. Tanda yang disebut berarti memindai benda-benda yang masih hidup, dan kemudian mendaur ulang benda-benda yang tidak ditandai. Setelah daur ulang, ruang kosong akan digabungkan atau ditandai untuk alokasi yang mudah di waktu berikutnya. Singkatnya, perlu mengurangi kerugian efisiensi yang disebabkan oleh fragmentasi memori. Dalam hal mekanisme eksekusi, JVM menyediakan serial GC (serialMSC), paralel GC (paralelMSC) dan GC (CMS) bersamaan. Detail algoritma spesifik perlu dipelajari lebih lanjut.
Mekanisme GC di atas perlu digunakan dalam kombinasi, dan metode yang ditentukan ditunjukkan pada tabel berikut:
Di atas adalah semua isi dari pemahaman mendalam tentang prinsip-prinsip kerja Java GC yang dibawa editor kepada Anda. Saya harap semua orang akan mendukung wulin.com lebih banyak ~