TIL

GC 알고리즘

Reference Counting Algorithm

Mark-and-Sweep Algorithm

Mark-and-Compact Algorithm

GC 종류

Serial GC

Parallel GC

Concurrent Mark-Sweep(CMS) GC

  1. Initial Mark
    1. GC에서 살아남을 객체를 Root Set에서 가장 가까운 객체만 탐색, 참조 유무 확인
    2. STW가 일어나지만 탐색 깊이가 짧아 시간이 적게 걸린다.
  2. Concurrent Mark
    1. Initial Mark 단계에서 마킹한(GC 대상이 아닌) 객체들의 참조 그래프를 탐색하여 GC 대상을 탐색
    2. STW가 일어나지 않고 애플리케이션 스레드와 함께 실행 된다.
  3. Remark
    1. Concurrent Mark 단계를 재검증
    2. GC 대상으로 추가 확인 되었는지, 참조가 제거되었는지 등
    3. STW가 일어나며 이 시간을 최대한 줄이기 위해 멀티 스레드로 수행
  4. Concurrent Sweep
    1. GC 대상 객체들을 멀티 스레드로 메모리에서 제거
    2. STW가 발생하지 않는다.
      • 전체적으로 STW 시간이 짧으며 애플리케이션 응답 속도가 중요할 때 사용하며 Low Latency GC라고도 불린다.
      • 단점으로는 해야 할 작업이 많아 CPU 부하가 커진다는 것이고 Compaction이 기본적으로 제공되지 않는다. - 필요할 때만 Compaction이 수행되는데 이 때의 STW가 다른 GC보다 더 걸릴 수도 있다.

Garbage First(G1) GC

Z GC

Z GC는 레퍼런스도 많이 없고 아직 많이 쓰이진 않는다.

기본적으로 자바 8 기준으로는 Parallel GC를 사용하게 될 것이다.

추가적인 튜닝으로 CMS, G1 GC를 많이 사용하는 추세다.


참고

https://www.youtube.com/watch?v=jXF4qbZQnBc

https://youtu.be/FMUpVA0Vvjw

https://velog.io/@hygoogi/자바-GC에-대해서

https://d2.naver.com/helloworld/1329

https://www.oracle.com/technetwork/tutorials/tutorials-1876574.html