Dari Java SE 6 HotSpot [tm] Tuning Pengumpulan Sampah Mesin Virtual
pengikut
GC Time dan OutOfMemoryError yang berlebihan
Kolektor serentak akan menampilkan OutOfMemoryError jika terlalu banyak waktu yang dihabiskan dalam pengumpulan sampah: jika lebih dari 98% dari total waktu dihabiskan untuk pengumpulan sampah dan kurang dari 2% dari heap dipulihkan, OutOfMemoryError akan dilemparkan. Fitur ini dirancang untuk mencegah aplikasi berjalan dalam waktu lama sementara hanya membuat sedikit atau tidak ada kemajuan karena heap terlalu kecil. Jika perlu, fitur ini dapat dinonaktifkan dengan menambahkan opsi -XX: -UseGCOverheadLimit ke baris perintah.
Kebijakannya sama dengan yang ada di kolektor paralel, kecuali waktu yang dihabiskan untuk melakukan koleksi serentak tidak dihitung dalam batas waktu 98%. Dengan kata lain, hanya pengumpulan yang dilakukan saat aplikasi dihentikan yang dihitung dalam waktu GC yang berlebihan. Koleksi semacam itu biasanya karena kegagalan mode bersamaan atau permintaan pengumpulan eksplisit (misalnya, panggilan ke System.gc ()).
dalam hubungannya dengan bagian bawah
Salah satu penggunaan pengumpulan sampah eksplisit yang paling sering ditemui terjadi dengan pengumpulan sampah terdistribusi (DGC) RMI. Aplikasi yang menggunakan RMI merujuk ke objek di mesin virtual lainnya. Sampah tidak dapat dikumpulkan dalam aplikasi yang didistribusikan ini tanpa terkadang mengumpulkan tumpukan lokal, jadi RMI memaksa pengumpulan penuh secara berkala. Frekuensi koleksi ini dapat dikontrol dengan properti. Sebagai contoh,
java -Dsun.rmi.dgc.client.gcInterval=3600000
-Dsun.rmi.dgc.server.gcInterval=3600000
menentukan koleksi eksplisit sekali per jam, bukan tarif default sekali per menit. Namun, hal ini juga dapat menyebabkan beberapa objek memerlukan waktu lebih lama untuk diklaim kembali. Properti ini dapat disetel setinggi Long.MAX_VALUE untuk membuat waktu antara koleksi eksplisit secara efektif tidak terbatas, jika tidak ada keinginan untuk batas atas ketepatan waktu aktivitas DGC.
Tampaknya menyiratkan bahwa periode evaluasi untuk menentukan 98% adalah satu menit, tetapi mungkin dapat dikonfigurasi pada JVM Sun dengan definisi yang benar.
Tentu saja, interpretasi lain dimungkinkan.
-XX:+DisableExplicitGC
tidak akan memengaruhi konfigurasi terkait RMI dan sistem akan memanggil gc dalam frekuensi yang disetel dengan parameter-Dsun.rmi.dgc.server.gcInterval
-Dsun.rmi.dgc.server.gcInterval
properti ini sudah ada sejak Java 1.2.