Dalam tutorial ini kita akan belajar tentang beberapa kolektor sampah yang ada. Di Java, pengumpulan sampah adalah proses otomatis yang dapat menggantikan programmer dengan tugas -tugas kompleks seperti alokasi memori dan daur ulang. Artikel ini adalah artikel ketiga dalam seri tutorial koleksi sampah. Di Bagian 2 sebelumnya, kami melihat cara kerja pengumpulan sampah di Java. Itu adalah artikel yang menarik. Saya sarankan Anda untuk melihatnya. Bagian pertama memperkenalkan koleksi sampah java, terutama termasuk arsitektur JVM, model memori heap dan beberapa istilah java.
Java memiliki empat jenis pengumpul sampah:
Kolektor Sampah Serial
Kolektor Sampah Paralel
Kolektor Sampah Pemindaian Tag Bersamaan (Kolektor Sampah CMS)
Kolektor sampah G1
Setiap jenis memiliki kekuatan dan kelemahannya sendiri. Yang penting, ketika kami memprogram, kami dapat memilih tipe pengumpul sampah melalui JVM. Kami memilih dengan memberikan parameter ke JVM. Setiap jenis sangat berbeda dan dapat memberi kami kinerja aplikasi yang sama sekali berbeda. Sangat penting untuk memahami setiap jenis pengumpul sampah dan membuat pilihan yang tepat berdasarkan pemilihan aplikasi.
1. Pengumpul Sampah Serial
Kolektor sampah serial bekerja dengan memegang semua utas aplikasi. Ini dirancang untuk lingkungan utas tunggal dan hanya menggunakan satu utas untuk pengumpulan sampah, dan berfungsi dengan membekukan semua utas aplikasi, sehingga mungkin tidak cocok untuk lingkungan server. Ini paling cocok untuk program baris perintah sederhana.
Kolektor sampah serial dapat digunakan melalui parameter JVM -xx:+useerialgc.
2. Pengumpul Sampah Paralel
Kolektor sampah paralel juga disebut throughputcollector. Ini adalah pengumpul sampah default untuk JVM. Tidak seperti kolektor sampah serial, ia menggunakan multithreading untuk pengumpulan sampah. Demikian pula, ini juga membekukan semua utas aplikasi saat melakukan koleksi sampah
3. Kolektor Pemindaian Mark Concurrent
Koleksi Sampah Tag Bersamaan menggunakan pemindaian multithreading memori heap, menandai instance yang perlu dibersihkan dan membersihkan contoh yang ditandai. Kolektor sampah tag bersamaan hanya akan menampung semua utas aplikasi dalam dua kasus berikut.
Ketika objek referensi yang ditandai berada di area bertenor;
Selama pengumpulan sampah, data dalam memori tumpukan diubah secara bersamaan.
Kolektor sampah pemindaian tag bersamaan menggunakan lebih banyak CPU untuk memastikan throughput program daripada pengumpul sampah paralel. Jika kita dapat mengalokasikan lebih banyak CPU untuk kinerja program yang lebih baik, maka markup bersamaan pada pemindai pengumpul sampah adalah pilihan yang lebih baik daripada pengumpul sampah bersamaan.
Buka tanda pemindaian tanda pemindaian konkuren melalui parameter JVM xx: + useparnewgc.
4. Kolektor Sampah G1
Kolektor sampah G1 cocok untuk situasi di mana heap memori besar. Ini membagi banyak memori menjadi berbagai area dan sampah mengumpulkannya secara bersamaan. G1 juga dapat memampatkan ruang memori heap yang tersisa setelah merebut kembali memori. Pemindaian bersamaan menandai kolektor sampah mengompres memori dalam kasus STW. Koleksi sampah G1 akan memberikan prioritas pada area tersebut dengan sampah terbanyak di bagian pertama.
Gunakan pengumpul sampah G1 melalui parameter JVM xx:+useg1gc
Fitur baru java8
Saat menggunakan pengumpul sampah G1, gunakan parameter JVM -xx:+UsestringDedupplication. Kami dapat mengoptimalkan memori heap dengan menghapus string duplikat dan hanya menyimpan satu char []. Opsi ini diperkenalkan di Java8u20.
Kami telah memberikan keempat kolektor sampah Java, yang perlu digunakan berdasarkan skenario aplikasi, kinerja perangkat keras, dan persyaratan throughput.
Konfigurasi JVM untuk pengumpulan sampah
Konfigurasi kunci JVM berikut semuanya terkait dengan koleksi sampah Java.
Jenis kolektor sampah berjalan
| Konfigurasi | menggambarkan |
|---|---|
| -Xx:+useerialgc | Kolektor Sampah Serial |
| -Xx:+useparallelgc | Kolektor Sampah Paralel |
| -Xx:+useconcmarksweepgc | Kolektor Garbage Pemindaian Tag Bersamaan |
| -Xx: paralelcmsthreads = | Kolektor Garbage Tag Pemindaian Bersamaan = Jumlah Thread yang Digunakan |
| -Xx:+useg1gc | Kolektor sampah G1 |
Konfigurasi GC yang dioptimalkan
| Konfigurasi | menggambarkan |
|---|---|
| -Xms | Inisialisasi ukuran memori heap |
| -Xmx | Nilai memori heap maksimum |
| -Xmn | Ukuran kronik |
| -Xx: Permsize | Inisialisasi ukuran generasi permanen |
| -Xx: Maxpermsize | Kapasitas maksimum generasi permanen |
Contoh penggunaan parameter JVM GC
java -xmx12m -xms3m -xmn1m -xx: permsize = 20m -xx: maxpermsize = 20m -xx:+useerialgc -jar java -application.jar
Meringkaskan
Di atas adalah semua tentang pemahaman singkat tentang jenis kolektor sampah Java dalam artikel ini, dan saya harap ini akan membantu semua orang. Teman yang tertarik dapat terus merujuk ke topik terkait lainnya di situs ini. Jika ada kekurangan, silakan tinggalkan pesan untuk menunjukkannya. Terima kasih teman atas dukungan Anda untuk situs ini!