Algoritma GC: Serial, G1, ZGC, Shenandoah
Bandingkan karakteristik jeda GC dan kompromi throughput pada berbagai pengumpul JVM modern.
Algoritma GC: Serial, G1, ZGC, Shenandoah adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Java Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Java Academy mencakup 4 pelajaran total.
Memilih Algoritme GC
JVM menyediakan beberapa algoritme GC, yang masing-masing dioptimalkan untuk beban kerja yang berbeda. Pemilihan yang tepat bergantung pada ukuran heap, kebutuhan latensi, dan sasaran laju pemrosesan.
// Enable GC algorithms:
// -XX:+UseSerialGC
// -XX:+UseParallelGC
// -XX:+UseG1GC (default since Java 9)
// -XX:+UseZGC (Java 15+ production)
// -XX:+UseShenandoahGC (Red Hat / OpenJDK builds)GC Serial
GC Serial menggunakan satu utas untuk pengumpulan. Semua utas aplikasi berhenti selama GC ("berhenti total"). GC ini hanya cocok untuk heap kecil atau lingkungan dengan satu CPU, seperti sistem tertanam.
// Use:
// java -XX:+UseSerialGC -Xmx256m MyApp
// Pauses: long (proportional to heap size)
// Throughput: low
// Best for: CLI tools, small heaps < 100 MBGC Paralel (Pengumpul Laju Pemrosesan)
GC Paralel menggunakan beberapa utas untuk GC minor dan mayor. Jeda berhenti total lebih singkat daripada GC Serial, tetapi tetap signifikan. GC ini paling sesuai untuk pemrosesan batch, ketika laju pemrosesan lebih penting daripada latensi.
// Use:
// java -XX:+UseParallelGC -XX:ParallelGCThreads=8 MyApp
// Pauses: moderate
// Throughput: high
// Best for: batch jobs, number crunchingG1 GC (Pengumpulan yang Mengutamakan Sampah)
G1 membagi heap menjadi wilayah berukuran sama (~2 KB – 32 MB). G1 terlebih dahulu mengumpulkan wilayah yang memiliki sampah paling banyak dan memenuhi target jeda yang dapat dikonfigurasi. Menjadi bawaan sejak Java 9.
// Use:
// java -XX:+UseG1GC -XX:MaxGCPauseMillis=200 MyApp
// Pauses: bounded by target (but not guaranteed)
// Throughput: good
// Best for: large heaps (4 GB+), mixed workloadsJenis Wilayah G1
Wilayah G1 ditetapkan secara dinamis sebagai Eden, Survivor, Old, atau Humongous (untuk objek besar > 50% ukuran wilayah). Fleksibilitas ini memungkinkan pengumpulan secara bertahap.
ZGC (Pengumpul Sampah Z)
ZGC melakukan sebagian besar pekerjaannya secara bersamaan dengan aplikasi. Waktu jedanya biasanya di bawah 1 md, terlepas dari ukuran heap. Siap digunakan di produksi sejak Java 15.
// Use:
// java -XX:+UseZGC -Xmx16g MyApp
// Pauses: < 1 ms (usually)
// Throughput: slightly lower than G1 (concurrent work has CPU cost)
// Best for: large heaps, low-latency services (APIs, trading)GC Shenandoah
Shenandoah (Red Hat) juga mencapai jeda di bawah satu milidetik melalui pemadatan secara bersamaan. Tersedia dalam rakitan OpenJDK. Tujuannya sangat mirip dengan ZGC, tetapi menggunakan algoritme internal yang berbeda.
// Use:
// java -XX:+UseShenandoahGC MyApp
// Available in: Red Hat builds, some AdoptOpenJDK distributions
// Pauses: sub-millisecond
// Best for: latency-sensitive workloadsZGC Generasional (Java 21+)
Java 21 memperkenalkan ZGC Generasional, yang menggabungkan pendekatan jeda rendah ZGC dengan pengumpulan generasional, sehingga mengurangi beban CPU sambil mempertahankan jeda minimal.
// Enable in Java 21+:
// java -XX:+UseZGC -XX:+ZGenerational -Xmx8g MyAppPertukaran Waktu Jeda GC vs Laju Pemrosesan
Tidak ada algoritme GC yang terbaik dalam segala hal. GC Paralel memaksimalkan laju pemrosesan. G1 menyeimbangkan laju pemrosesan dan latensi. ZGC/Shenandoah meminimalkan jeda dengan sedikit pengorbanan pada laju pemrosesan.
Mengaktifkan Pencatatan GC
Catat peristiwa GC dengan -Xlog:gc*:file=gc.log:time,uptime,level. Analisis log menggunakan alat seperti GCViewer atau GCEasy untuk menemukan jeda panjang dan lonjakan alokasi.
// JVM flags:
// -Xlog:gc*:file=gc.log:time,uptime,level,tags
// Inspect logs:
// cat gc.log | grep "Pause"Memantau GC dengan Metrik JVM
Gunakan ManagementFactory.getGarbageCollectorMXBeans() untuk membaca jumlah dan durasi GC secara terprogram, atau ekspor data tersebut ke Prometheus melalui Micrometer dalam aplikasi Spring Boot.
ManagementFactory.getGarbageCollectorMXBeans().forEach(gc ->
System.out.printf("%s: %d collections, %d ms%n",
gc.getName(), gc.getCollectionCount(), gc.getCollectionTime()));Pemeriksaan Singkat
Algoritme GC mana yang menargetkan waktu jeda di bawah satu milidetik di produksi?
Ringkasan
Gunakan GC Serial untuk heap yang sangat kecil, GC Paralel untuk laju pemrosesan batch, G1 untuk beban kerja seimbang (bawaan), serta ZGC/Shenandoah untuk latensi yang sangat rendah. Aktifkan pencatatan GC di produksi untuk mendeteksi masalah sejak awal.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Algoritma GC: Serial, G1, ZGC, Shenandoah” gratis?
Ya — teks lengkap “Algoritma GC: Serial, G1, ZGC, Shenandoah” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Java Academy, upgrade ke CoddyKit PRO. Kursus Java Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Algoritma GC: Serial, G1, ZGC, Shenandoah”?
Bandingkan karakteristik jeda GC dan kompromi throughput pada berbagai pengumpul JVM modern. Kamu berlatih Java Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Java Academy?
Tidak diperlukan pengalaman sebelumnya. Java Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Algoritma GC: Serial, G1, ZGC, Shenandoah” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Java Academy ini?
Ya. Setiap pelajaran Java Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Region Heap JVM dan Siklus Hidup Objek
- Algoritma GC: Serial, G1, ZGC, Shenandoah
- Mendeteksi dan Memperbaiki Kebocoran Memori
- Flag Penyetelan GC dan Pembuatan Profil dengan JVisualVM