Apa itu kolektor sampah java
Kolektor Sampah Java adalah salah satu dari tiga modul penting dari Java Virtual Machine (JVM) (dua lainnya adalah penerjemah dan mekanisme multi-threaded). Ini menyediakan aplikasi dengan alokasi memori otomatis (alokasi memori) dan fungsi pengumpulan memori otomatis (pengumpulan sampah). Kedua operasi terjadi pada tumpukan java (sepotong memori cepat). Pada titik waktu tertentu, jika suatu objek memiliki lebih dari satu referensi yang menunjuk padanya, maka objeknya hidup. Kalau tidak, itu akan dianggap sampah dan dapat didaur ulang dan digunakan kembali oleh pengumpul sampah. Operasi pengumpulan sampah memerlukan CPU, utas, waktu, dan sumber daya lainnya, sehingga mudah untuk dipahami bahwa operasi pengumpulan sampah tidak terjadi secara real time (objek dilepaskan segera setelah kematian). Ketika memori dikonsumsi atau indikator tertentu tercapai (ambang batas, rasio memori terhadap total memori digunakan, seperti 0,75), operasi pengumpulan sampah dipicu. Ada pengecualian untuk kematian suatu objek. Bahkan jika objek tipe java.lang.thread tidak direferensikan, selama utas masih berjalan, itu tidak akan didaur ulang.
Mekanisme daur ulang
Menurut analisis statistik, sebagian besar objek di Java (termasuk beberapa bahasa tingkat tinggi lainnya) memiliki siklus hidup yang pendek, sehingga memori Java dikelola dalam generasi ke generasi. Tujuan dari divisi generasi tidak lebih dari menggunakan strategi manajemen (algoritma) yang berbeda untuk blok memori dari generasi yang berbeda untuk memaksimalkan kinerja. Dibandingkan dengan generasi yang lebih tua, generasi muda biasanya jauh lebih kecil, dan frekuensi daur ulang tinggi dan kecepatannya cepat. Lansia memiliki frekuensi daur ulang yang rendah dan membutuhkan waktu lama. Memori didistribusikan pada generasi muda. Objek -objek di generasi muda akan secara otomatis dipromosikan ke generasi lama setelah beberapa siklus daur ulang.
Pilihan desain
Pilihan desain mempengaruhi kesulitan implementasi pengumpul sampah JVM dan indikator kinerja JVM, dan cocok untuk skenario yang berbeda. Ini menggambarkan karakteristik gaya algoritma daur ulang.
Daur Ulang Serial Single-Threaded vs Multi-Threaded Parallel Recycling
Pertanyaan apakah operasi daur ulang itu sendiri diproses oleh banyak utas. Keuntungan dari daur ulang satu thread adalah sederhana, mudah diimplementasikan, dengan beberapa fragmen, dan cocok untuk mesin inti tunggal. Daur ulang paralel multi-threaded dapat sepenuhnya memanfaatkan sumber daya CPU pada mesin multi-core, mengurangi waktu daur ulang dan meningkatkan produktivitas. Kerugiannya adalah bahwa itu rumit dan beberapa fragmen mungkin tidak didaur ulang.
Jeda utas aplikasi selama daur ulang vs daur ulang dan aplikasi bersamaan
Keluarkan apakah akan menjeda utas aplikasi selama operasi daur ulang. Keuntungan dari utas aplikasi yang menjeda adalah bahwa mereka sederhana, akurat, dibersihkan relatif bersih, dan dibersihkan untuk waktu yang singkat (tidak termasuk sumber daya CPU). Kerugiannya adalah bahwa jeda utas aplikasi akan menyebabkan waktu respons aplikasi diperpanjang selama siklus pengumpulan sampah, dan sistem dengan kinerja real-time yang sangat tinggi lebih sensitif. Keuntungan dari pemrosesan paralel dari benang daur ulang dan aplikasi adalah bahwa waktu reaksi aplikasi relatif stabil, dan kerugiannya adalah sulit untuk mencapai, frekuensi pembersihan yang tinggi, dan kemungkinan fragmentasi.
Unmerge Freed Memory Fragments vs menggabungkan fragmen memori dibebaskan vs menyalin hidup ke tempat baru
Tiga opsi ini menjelaskan cara mengelola fragmen blok memori mati. Fragmen memori mati biasanya tersebar di mana -mana di tumpukan. Jika tidak dikelola, akan ada dua masalah. Ketika alokasi memori lambat karena menemukan memori yang tersedia, fragmen kecil akan menyebabkan limbah memori (seperti array besar membutuhkan fragmen memori kontinu yang besar). Ada dua cara untuk mengelola: pindahkan memori hidup ke salah satu ujung blok memori, catat posisi awal memori yang tersedia, atau cukup salin memori hidup ke area memori baru, dan blok memori asli benar -benar kosong.
Metrik kinerja
①. Produktivitas (throughput)
Rasio waktu non-pemulihan terhadap total waktu dalam periode yang lebih lama (hanya periode yang lama bermakna). Mengukur efisiensi operasi sistem.
②. Koleksi sampah di atas kepala
Rasio waktu pemulihan terhadap total waktu dalam periode yang lebih lama. Sesuai dengan produktivitas, jumlah total 100%.
③. Jeda waktu
Ketika mesin virtual Java mendaur ulang sampah, beberapa algoritma akan menjeda pelaksanaan semua utas aplikasi, dan beberapa sistem mungkin peka terhadap interval waktu jeda.
④. Frekuensi koleksi
Berapa lama waktu yang dibutuhkan untuk pulih?
⑤. Ukuran penggunaan memori (jejak kaki)
Seperti ukuran tumpukan.
⑥. Real-time (ketepatan)
Berapa lama waktu yang dibutuhkan suatu objek untuk menempati memori dari objek untuk didaur ulang?
Jenis Koleksi Sampah
Semua jenis pendaur ulang didasarkan pada teknologi generasi. Java Hotspot Virtual Machine mencakup tiga generasi, generasi muda, generasi tua, dan generasi permanen.
Generasi Generasi Saham
Menyimpan kelas, metode, dan informasi deskripsi mereka. Ukuran awal dan nilai maksimum dapat ditentukan oleh dua opsi opsional -xx: Permsize = 64m dan -xx: maxpermsize = 128m. Biasanya kita tidak perlu menyesuaikan parameter ini, ukuran generasi permanen default sudah cukup, tetapi jika ada terlalu banyak kelas yang dimuat dan tidak cukup, cukup sesuaikan nilai maksimum.
② generasi yang lebih tua
Objek penyimpanan utama dalam generasi muda yang masih bertahan dan meningkatkan setelah beberapa siklus daur ulang masih hidup. Tentu saja, untuk beberapa alokasi memori yang besar, mereka mungkin juga secara langsung dialokasikan untuk generasi permanen (contoh ekstrem adalah bahwa generasi muda tidak dapat menabung sama sekali).
③Young generasi
Sebagian besar alokasi memori dan tindakan daur ulang terjadi pada generasi muda. Seperti yang ditunjukkan pada gambar di bawah ini, generasi muda dibagi menjadi tiga area, area asli (Eden) dan dua area bertahan hidup kecil (penyintas). Dua area kelangsungan hidup dibagi menjadi dari dan sesuai dengan fungsinya. Sebagian besar benda dialokasikan di area asli, dan lebih dari satu operasi pengumpulan sampah masih bertahan ditempatkan di ruang tamu.
Kolektor Serial
Satu utas melakukan operasi daur ulang, menangguhkan pelaksanaan semua utas aplikasi selama periode daur ulang. Recycler default dalam mode klien dipaksa untuk ditentukan melalui opsi baris perintah -xx:+useerialgc.
① Koleksi Minor untuk Generasi Muda
Pindahkan benda -benda yang masih hidup di daerah Eden ke daerah ke. Jika area ke tidak dapat dipasang, pindahkan langsung ke generasi lama. Jika dari area dari area tidak dapat dipasang, pindahlah langsung ke generasi lama. Jika dari area dari area sangat tua, tingkatkan ke generasi lama. Setelah daur ulang selesai, baik Eden dan dari daerah kosong. Pada saat ini, fungsi dari dan untuk dipertukarkan, dari diubah menjadi dan ke, dan menjadi kosong sebelum setiap putaran daur ulang. Pilihan desain adalah replikasi.
② Algoritma Daur Ulang Untuk Lansia (Koleksi Lengkap)
Daur ulang orang tua dibagi menjadi tiga langkah: tanda, sapu, dan gabungkan. Tahap menandai menandai semua benda yang masih hidup, tahap kliring melepaskan semua benda mati, dan tahap penggabungan menggabungkan semua objek yang masih hidup ke bagian sebelumnya dari generasi lama, meninggalkan semua fragmen bebas di belakang. Pilihan desain digabungkan untuk mengurangi fragmentasi memori.
Kolektor Paralel
Gunakan beberapa utas untuk melakukan koleksi sampah secara bersamaan. Lingkungan multi-core dapat sepenuhnya memanfaatkan sumber daya CPU, mengurangi waktu daur ulang, meningkatkan produktivitas JVM, dan pendaur ulang default dalam mode server. Seperti pendaur ulang serial, eksekusi semua utas aplikasi ditangguhkan selama daur ulang. Terpaksa menentukan melalui opsi baris perintah -xx:+useparallelgc.
① Koleksi Minor untuk Generasi Muda
Beberapa utas digunakan untuk mendaur ulang sampah, dan algoritma masing -masing utas sama dengan recycler serial.
② Algoritma Daur Ulang Untuk Lansia (Koleksi Lengkap)
Generasi yang lebih tua masih berlandas tunggal, sama dengan pendaur ulang serial.
Koleksi pemadatan paralel
Daur ulang generasi muda dan generasi yang lebih tua diproses dengan multi-threading. Ditentukan oleh opsi perintah -xx:+useparalleloldgc, xx: paralelgcthreads = 3 dapat lebih lanjut menentukan jumlah utas yang berpartisipasi dalam daur ulang paralel. Seperti pendaur ulang serial, eksekusi semua utas aplikasi ditangguhkan selama daur ulang. Dibandingkan dengan pendaur ulang paralel, generasi yang lebih tua memiliki waktu daur ulang yang lebih pendek, sehingga mengurangi waktu jeda. Terpaksa menentukan melalui XX:+opsi baris perintah USEPARALLELOLDGC.
① Koleksi Minor untuk Generasi Muda
Sama seperti kolektor paralel
② Algoritma Daur Ulang Untuk Lansia (Koleksi Lengkap)
Lansia dibagi menjadi tiga langkah: menandai, menghitung, dan menggabungkan. Gagasan pembagian digunakan di sini, dan generasi lama dibagi menjadi banyak wilayah dengan ukuran tetap. Pada tahap penandaan, semua objek yang masih hidup dibagi menjadi kelompok -kelompok N (jumlah utas daur ulang harus sama dengan jumlah utas daur ulang). Setiap utas bertanggung jawab secara independen untuk kelompoknya sendiri, menandai lokasi objek yang masih hidup dan informasi tingkat kelangsungan hidup wilayah (wilayah), dan menandainya sebagai paralel. Pada tahap statistik, tingkat kelangsungan hidup masing -masing wilayah dihitung. Pada prinsipnya, tingkat kelangsungan hidup di depan relatif tinggi. Dari depan ke belakang, posisi awal yang layak digabungkan ditemukan (area di mana sebagian besar objek bertahan tidak layak untuk digabungkan). Tahap statistik adalah serial (utas tunggal). Pada tahap gabungan, berdasarkan informasi pada tahap statistik, banyak utas menyalin objek yang masih hidup dari satu wilayah ke wilayah lain secara paralel.
Kolektor Mark-Sweep Concurrent
Juga dikenal sebagai kolektor latensi rendah, aplikasi ini ditangguhkan untuk waktu yang lebih singkat melalui berbagai cara. Pada dasarnya melakukan operasi daur ulang secara bersamaan dengan aplikasi, tanpa menggabungkan dan menyalin operasi. Ditentukan melalui baris perintah -xx:+useconcmarksweepgc, Anda juga dapat menentukan penggunaan mode daur ulang tambahan -xx:+useconcmarksweepgc dalam sistem inti tunggal atau dual -core. Daur ulang tambahan mengacu pada membagi operasi daur ulang menjadi beberapa fragmen, melaksanakan satu fragmen dan melepaskan sumber daya CPU ke aplikasi, dan kemudian terus mendaur ulang hasil terakhir pada titik tertentu di masa depan. Tujuannya juga untuk mengurangi penundaan.
① Koleksi Minor untuk Generasi Muda
Sama seperti kolektor paralel
② Algoritma Daur Ulang Untuk Lansia (Koleksi Lengkap)
Ini dibagi menjadi empat langkah: tanda awal, tanda bersamaan, komentar, dan sapuan bersamaan. Berikan perhatian khusus, tidak ada operasi gabungan, jadi akan ada fragmen.
Alat Evaluasi Kinerja untuk Kolektor Sampah Java
①xx:+printgcdetails dan xx:+printgcTimestamps
Informasi tentang waktu mulai, durasi, memori cadangan dari setiap generasi, dll.
②JMAP [Opsi] PID
JAMP 2043 Lihat objek bersama yang telah dimuat dalam proses 2043. Biasanya file dll.
JMAP -Heap 2043 Periksa informasi konfigurasi dan penggunaan tumpukan memori.
JMAP -PERMSTAT 2043 Periksa status pemuatan generasi permanen.
JMAP -Histo 2043 Periksa pemuatan dan penggunaan memori kelas.
③jstat [opsi] pid
JSTAT -Class 2043 Kelas Memuat, Membongkar, Penggunaan Memori.
JSTAT -G -GC 2043 GC Status Eksekusi.
nota bene
Java menyediakan fungsi optimasi pemilihan otomatis dan kinerja otomatis. Sebelum melakukan tuning pengumpul sampah, daftar pertama indikator kinerja yang Anda khawatirkan, beri tahu JVM indikator kinerja yang Anda khawatirkan melalui baris perintah, dan secara otomatis disetel oleh JVM. Jika Anda tidak puas, Anda dapat menentukan pengumpul sampah. Outofmemory biasanya karena memori heap yang tidak mencukupi, sehingga Anda dapat menyesuaikan -xmx1024m dan -xx: maxpermsize = 128m baris perintah.
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.