본문 바로가기

Programming Language/Java & Scala

Java GC 종류별 도식화

이 포스트는 https://blog.voidmainvoid.net/190에서 이어지는 내용입니다.

 

자바 가비지 컬렉션 설명 및 종류

Getting Started JVM 기반 언어와 C, C++과 가장 큰 다른점은 free()와 같은 메모리접근을 통한 명시적 메모리 해제 여부이다. 자바는 OS메모리 영역에 직접 접근하지 않고 JVM이라는 Process이자 가상머신을 통해..

blog.voidmainvoid.net

Garbage Collection은 Heap memory에 존재하는 unreachable object를 삭제하는 과정입니다. Java에서는 여러 버젼을 업그레이드 해가는 동안 다양한 GC알고리즘을 적용했었습니다. 오늘은 각 GC별 동작을 도식화하여 설명드리도록 하겠습니다.

 

GC 도식화 설명에 앞선 용어설명

- STW(Stop The World) : GC가 발생할 경우 또는 GC를 위한 일부 작업을 할때, JVM은 애플리케이션을 멈춤. GC를 수행하느 쓰레드만 실행.

- Unreachable object : Heap memory에 존재하는 더이상 사용하지  않는 객체

- Young Generation : 새롭게 생성한 객체가 가장 처음 머무는 곳. 이곳의 GC는 Minor GC라고 부름.

- Old Generation : Young Generation에서 승급한 객체들이 머무는곳. 이곳의 GC는 Major(Full) GC라고 부름.

 

1. Serial GC

Minor, Major GC가 순차적으로 수행됨. Deletion, Compaction이 수행됩니다.

2. Parallel GC

CPU를 효과적으로 활용하기위해 GC수행의 일부 로직은 멀티스레드로서 동작합니다. Deletion, Compaction이 수행됩니다.

3. Parallel Old GC

Parallel GC와 다르게 Old영역의 GC처리때 Mark-summary-compaction 단계를 거칩니다. Summary를 통해 Reachable 객체를 살핀다는점에서 다소 다름.

4. CMS GC

Compaction은 수행하지 않지만, GC 작업을 애플리케이션 스레드와 동시에 수행함으로서 STW시간을 최소화 합니다. 다만, GC단계에서Compaction단계가 없기 때문에 추후 Compaction실행될때 STW가 길다고 합니다.

5. G1 GC

Java 7부터 사용가능하고 Java 9에서부터 default GC로 사용됨. Oracle문서에 따르면 heap size가 6GB보다 클 경우 GC의 latency를 0.5sec이하로 낮출수 있다고 합니다.

 

GC.key
0.38MB

태그