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
'Java' 카테고리의 다른 글
[이펙티브자바] 아이템7. 다 쓴 객체 참조를 해제하라. (0) | 2023.05.10 |
---|---|
[이펙티브자바] 아이템 6. 불필요한 객체 생성을 피하라 (0) | 2023.05.09 |
[이펙티브자바] 아이템4. 인스턴스화를 막으려거든 private 생성자를 사용하라 (0) | 2023.04.21 |
[Java] JVM 과 구조 (0) | 2022.06.17 |