Java

[이펙티브자바] 완벽공략 18. 가비지 컬렉션

yerimkoko 2023. 5. 9. 12:24
728x90

이펙티브 자바

 

완벽 공략 18. 가비지 컬렉션

기본 개념

Mark, Sweep, Compact

Young Generation (Eden, S0, S1), Old Generation

  • 금방 죽는 young Generation, 최초에 Eden 영역, 그리고 꽉 차게 되면 S0, S1,
  • 오랫동안 살아 남는 Old generation

 

Minor GC(Young generation), Full GC(old generation)

 

Throughput, Latency (Stop-The-World), Footprint

  • 이 3가지 관점에서 각각의 GC 로직을 봐야 한다.
  • Throughput: application 처리량
    • (서버에 역량이 100 이라고 봤을 때, 100의 리소스를 다 사용하면 Throughput이 아주 좋다. 할 일을 다 하기 때문에..?)
    • 그런데 GC를 Mark, Sweep, Compact 하는 과정 중에 별도의 thread를 따서 일부를 계속 수행할 수 있다. → 시스템의 일부를 GC에 계속 사용을 한다. 그렇다면 throughput 이 조금 줄어든다.
    • 한 마디로, ✌🏻**GC가 throughput에 얼마만큼 영향을 주느냐?**✌🏻 가 관점이다.
  • Latency (Stop-The-World) → 가장 중요하다.
    • stop the world 는 빠질 수 없다. GC가 일어나는 경우에 아무것도 하지 못 한다.
    • GC는 계속 일을 한다. GC ✌🏻만✌🏻일을 한다. 그러므로 더 이상 새로운 Object를 만들 수 없다.
    • 그러므로 GC 가 길어지면 길어질 수록 시스템 장애(…)가 발생할 수 있다.
    • throughput 이 조금 떨어지더라도 stop the world 시간이 줄어든다면 latency를 선택한다.
  • Foot print: GC가 얼마나 많은 메모리를 필요로 하는가?
    • GC 알고리즘을 수행하는 데 있어서 얼마나 많은 메모리를 사용하는가?
    • 16GB를 사용하는데 애플리케이션에 GC 가 800M~900M 정도 사용하는 경우가 있다.

 

 

GC 의 종류

  • Serial, Parallel(java 8 Ver)
  • CMS(java 9 Ver 부터 deprecataed, 개념적으로만 볼 것)
  • G1(java 11 Ver.)
  • ZGC(지금 까지 나온 GC 중에 가장 좋음, Latency 가장 낮음)
  • Shenandoah