Java/Garbage Collection(5)
-
G1 GC
G1 GC란 G1 GC는 대용량의 메모리가 있는 멀티 프로세서 시스템을 위해 제작되었습니다. 빠른 처리 속도를 달성하면서 pause의 최소화를 충족시키는 것이 G1 GC의 목표입니다. Heap은 동일한 크기의 영역으로 나뉘어 집합으로 분할되어 연속된 가상 메모리로 존재하게 됩니다. G1 GC는 Heap Area를 일정 크기의 region으로 구분하여 논리적으로 구분하고 있습니다. 최초 객체가 생성되면 Eden에 할당하고 Survivor로의 이동과 소멸 그리고 Old Region으로의 이동 생명주기를 가집니다. G1 GC의 수행 과정 Initial Mark Old Region에 존재하는 객체들이 참조하는 Survivor Region을 찾습니다. Root Region Scan Initial Mark에서 발견..
2021.10.14 -
ZGC
ZGC란 ZGC는 아래의 목표를 충족하기 위해 설계된 확장 가능하고 낮은 지연율을 가진 GC입니다. 정지 시간이 최대 10ms를 초과하지 않음 Heap의 크기가 증가하더라도 정지 시간이 증가하지 않음 8MB ~ 16TB에 이르는 다양한 범위의 Heap 처리 가능 JVM으로 구동되는 애플리케이션의 경우, GC가 동작할 때 pause로 인해 성능에 큰 영향을 미쳐왔습니다. ZGC는 Load barrier와 Colored Pointer를 함께 사용해 puase 시간을 줄여 성능이 향상되었습니다. Colored Pointer 객체를 가리키는 변수의 포인터에서 64bit를 활용해서 marking을 하고 있습니다. Finalizable: finalizer를 통해서만 참조되는 Object의 Garbage Remapp..
2021.10.10 -
Shenandoah GC
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 Shenando..
2021.10.09 -
GC 모니터링
GC 모니터링이란 GC 모니터링이란 JVM이 어떻게 GC를 수행하고 있는지 알아내는 과정을 말합니다. 예를 들어 Young 영역에 있던 객체를 Old 영역으로 언제 얼마나 이동했는지, stop-the-world가 언제 일어나고 얼마동안 일어났는지 등의 정보를 알 수 있습니다. GC를 모니터링 하는 이유는 JVM이 효율적으로 GC를 수행하는지 파악하고 추가적인 GC 튜닝 작업이 필요한지 확인하기 위해서입니다. GC 모니터링으로 파악한 정보를 바탕으로 애플리케이션을 수정하거나 GC를 튜닝할 수 있습니다. GC 모니터링 방법 jstat jstat은 HotSpot JVM에 있는 모니터링 도구입니다. jstat 이외에 HotSpot JVM 모니터링 도구로는 jps와 statd가 있습니다. Java 애플리케이션을 ..
2021.08.13 -
GC 튜닝
GC 튜닝을 해야하는 이유 일반적으로 Java에서 생성된 객체는 GC가 처리해서 지웁니다. 생성된 객체가 많을수록 GC가 처리해야 하는 대상도 많아지고, GC를 수행하는 횟수도 증가합니다. 즉, 운영하고 만드는 시스템이 GC를 적게 하도록 하려면 객체 생성을 줄이는 작업을 먼저 해야합니다. 만약 애플리케이션 메모리 사용도 튜닝을 많이 해서 어느 정도 만족할 만한 상황이 되었다면, 본격적으로 GC 튜닝을 합니다. GC 튜닝의 목적 Old 영역으로 넘어가는 객체의 수 최소화하기 최신 Java이 아닌 구 버전의 Java는 Eden 영역에서 객체가 처음 만들어지고, Survivor 영역을 오가다가, 끝까지 남아 있는 객체를 Old 영역으로 이동합니다. 간혹, Eden 영역에서 만들어지다가 크기가 커져서 Old ..
2021.08.12