[JAVA] - 가비지 컬렉션 튜닝

목차

참고

가비지 컬렉션 튜닝

전체적으로 GC(Minor GC + Major GC) 가 적게 발생하기 위해서는 우선적으로 객체를 적게 생성하면 된다.

  • Old Generation 으로 넘어가는 객체의 수 최소화 (횟수)
  • Full GC 시간 줄이기 (영역)

1. Old Generation 으로 넘어가는 객체의 수 최소화

New Generation 의 경우 Old Generation 영역보다 작기 때문에 상대적으로 Stop The World 가 작게 발생한다.

2. Full GC 시간 줄이기

Full GC 를 줄이는 방법은 Scan 영역을 줄이는 방법이고 이는 곧 Old Generation 의 영역을 줄이는 것 을 뜻한다. 하지만 Old Generation 영역이 줄어들게 되면 OOM(Out Of Memory Error) 가 발생할 수 있기 때문에 적절한 메모리 영역을 설정해 주는 것이 중요하다.

JVM 메모리 옵션

JVM 메모리 옵션을 통해 메모리 크기를 키울수록 GC 가 발생하는 빈도수는 적어집니다. 하지만 작은 메모리에 비해 GC 수행시간은 길어지게 됩니다.

구분 옵션 설명
Heap 영역 크기 -Xms JVM 시작 시 힙 영역 크기
Heap 영역 크기 -Xmx 최대 힙 영역 크기
New 영역 크기 -XX:NewRatio New 영역과 Old 영역의 비율
New 영역 크기 -XX:NewSize New 영역의 크기
New 영역 크기 -XX:SurvivorRatio Eden 영역과 Survivor 영역의 비율

GC 방식 변경

구분 옵션 비고
Serial GC -XX:+UseSerialGC
Parallel GC -XX:+UseParallelGC
-XX:ParallelGCThreads=value
Parallel Compacting GC -XX:+UseParallelOldGC
CMS GC -XX:+UseConcMarkSweepGC
-XX:+UseParNewGC
-XX:+CMSParallelRemarkEnabled
-XX:CMSInitiatingOccupancyFraction=value
-XX:+UseCMSInitiatingOccupancyOnly
G1 -XX:+UnlockExperimentalVMOptions
-XX:+UseG1GC
JDK 6에서는 두 옵션을 반드시 같이 사용해야 함
Share