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