
목차
참고
가비지 컬렉션 튜닝
전체적으로 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에서는 두 옵션을 반드시 같이 사용해야 함 |