2018.04.25
Explicit GC
概要
System.gc()の呼び出しによる強制的なFull GCの操作をExplicit GCと呼びます。次のような場合にEXplicit GCが発生します。
・ApplicationによるSystem.gc()の呼び出し
・RMI LibraryによるSystem.gc()の呼び出し
Explicit GCが過度に頻繁に発生する場合、不要なFull GCが成り立つApplicationのパフォーマンスを大幅に低下させることになります。基本的には、System.gc()をApplication内部では可能な限り呼び出さないことになります。
ApplicationによるExplicit GC防止
Applicationによる強制的なExplicit GCを防ぐ方法は、DisableExplicitGCオプションを使用することです。
java -XX:+ DisableExplicitGC ...
上記の方法は、RMIによるExplicit GCを防ぐためにも使用可能です。
RMIによるExplicit GC防止
RMIによる発生したRemote Objectを整理するためにJVMは、定期的にExplicit GCを呼び出します。 JDK 1.6以前では、基本的には60秒(1分)ごとにExplicit GCが発生します。幸いなことに、JDK 1.6以降では、この間隔が一時間に増えました。
RMIによるExplicit GC問題は、その間隔(Interval)を増やすこと解決可能です。例えば、時間間隔を1時間に増やすには、次のように値を設定します。
-Dsun.rmi.dgc.server.gcInterval=360000 -Dsun.rmi.dgc.client.gcInterval=360000