Shenandoah GC

2021. 10. 9. 17:22Java/Garbage Collection

Shenandoah GC의 개념

Shenandoah GC는 '큰 GC 작업을 적은 횟수로 수행하는 것보다 작은 GC 작업을 여러분 수행하는게 더 좋다'는 개념을 적용해 만들어진 GC 입니다. Shenandoah GC는 작은 단위의 GC 수행을 자주 수행하기 위해 Concurrency를 보장합니다. 즉 말하자면, GC가 CPU를 더 사용하는 대신 pause 시간을 줄이겠다는 의미입니다.

Shenandoah GC의 특징

Shenandoah GC는 기존 CMS가 가진 단편화, G1이 가진 pause의 이슈를 해결했습니다. 강력한 Concurrency와 가벼운 GC 로직으로 heap 사이즈에 영향을 받지 않고 일정한 pause 시간이 소요됩니다.

Single-Generational

Shenandoah GC는 G1 GC를 기반으로 만들어졌습니다. heap을 region 별로 나누고 mark-seep & evacuation을 진행합니다. 그러나 Shenandoah GC는 G1 GC와 다르게 Generation으로 영역을 나누지 않습니다. Generation을 나누게 되면 영역을 나누고 evacuation과정에서 메모리 copy가 계속 발생합니다. 그러나 Generation이 나누어지지 않으면 memory copy에 대한 비용이 없어집니다.

Shenandoah GC의 동작 과정

  1. Initial Marking
  2. Concurrent Marking
  3. Final Marking
  4. Concurrent Compaction

pause후 root set을 스캔하고 Java 스레드와 동시에 marking을 수행합니다. 그 이후 한번 더 pause를 수행하여 final marking을 수행하고 압축 마지막 단계에서 marking된 객체들을 제거합니다. 전체적인 흐름은 CMS GC와 비슷합니다.

728x90

'Java > Garbage Collection' 카테고리의 다른 글

G1 GC  (0) 2021.10.14
ZGC  (0) 2021.10.10
GC 모니터링  (0) 2021.08.13
GC 튜닝  (0) 2021.08.12