Explicit GC

EXEM Knowledge Base

Jump to: navigation, 찾기

[편집] 개요

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