7.1* Cara memilih pengumpul sampah yang tepat

Jika aplikasi Anda tidak memiliki persyaratan latensi yang ketat, Anda sebaiknya menjalankan aplikasi dan membiarkan JVM sendiri memilih kolektor yang tepat.

Dalam kebanyakan kasus, pengaturan default berfungsi dengan baik. Jika perlu, Anda dapat menyesuaikan ukuran heap untuk meningkatkan performa. Jika performa masih belum seperti yang diharapkan, coba modifikasi kolektor agar sesuai dengan kebutuhan aplikasi Anda.

  • Berurutan . Jika aplikasi memiliki kumpulan data kecil (hingga sekitar 100 MB) dan/atau akan berjalan pada satu prosesor tanpa persyaratan latensi apa pun.
  • Paralel . Jika prioritasnya adalah kinerja puncak aplikasi dan tidak ada persyaratan latensi (atau jeda satu detik atau lebih dapat diterima).
  • CMS/G1 . Jika waktu respons lebih penting daripada keseluruhan throughput, dan jeda pengumpulan sampah harus lebih pendek dari satu detik.
  • ZGC . Jika waktu respons adalah prioritas tinggi dan/atau tumpukan yang sangat besar terlibat.

7.2* Rekomendasi untuk pengumpulan sampah

Hindari pemicu manual

Selain mekanisme dasar pengumpulan sampah, salah satu poin terpenting tentang proses ini di Jawa adalah non-deterministik. Artinya, tidak mungkin untuk memprediksi kapan tepatnya pada waktu berjalan itu akan terjadi.

Dengan menggunakan metode System.gc() atau Runtime.gc() , Anda dapat menyertakan petunjuk dalam kode untuk memulai pengumpul sampah, tetapi ini tidak menjamin bahwa itu akan benar-benar berjalan.

Gunakan alat analisis

Jika Anda tidak memiliki cukup memori untuk menjalankan aplikasi, Anda akan mengalami pelambatan, waktu pengumpulan sampah yang lama, peristiwa "stop dunia", dan akhirnya kesalahan kehabisan memori. Ini mungkin menunjukkan bahwa heap terlalu kecil, tetapi mungkin juga menunjukkan bahwa aplikasi mengalami kebocoran memori.

Anda dapat menggunakan alat pemantau seperti jstat atau Java Flight Recorder untuk melihat apakah penggunaan heap meningkat tanpa batas waktu, yang dapat mengindikasikan adanya bug dalam kode.

Lebih suka pengaturan default

Jika Anda memiliki aplikasi Java mandiri yang kecil, Anda mungkin tidak perlu menyiapkan pengumpulan sampah. Pengaturan default akan membantu Anda dengan baik.

Gunakan flag JVM untuk menyesuaikan

Pendekatan terbaik untuk menyiapkan pengumpulan sampah di Java adalah dengan menyetel flag JVM. Bendera dapat digunakan untuk mengatur pengumpul sampah (misalnya, Serial, G1, dan seterusnya), ukuran awal dan maksimum tumpukan, ukuran partisi tumpukan (misalnya, Generasi muda, Generasi tua), dan banyak lagi lagi.

Pilih keran yang tepat

Pedoman yang baik dalam hal pengaturan awal adalah sifat dari aplikasi kustom. Misalnya, pengumpul sampah serentak efisien, tetapi sering memunculkan peristiwa "stop dunia", membuatnya lebih cocok untuk pemrosesan internal di mana jeda panjang dapat diterima.

Pada saat yang sama, pengumpul sampah CMS dirancang untuk meminimalkan latensi, yang menjadikannya ideal untuk aplikasi web yang mengutamakan daya tanggap.