Heap GC 부담 감소
• 클래스 메타데이터가 많으면 Full GC가 더 자주 발생
PermGen Size 튜닝 문제 해결
• -XX:PermSize -XX:MaxPermSize 로 힙 메모리 안에서 사이즈 설정이 필요
• Metaspace는 기본적으로 OS 메모리를 사용하기 때문에 필요한 만큼 자동 확장이 가능함.
ClassLoader Leak 대응 개선
ClassLoader Leak 문제란?
ClassLoader가 더 이상 사용되지 않는데도 GC되지 못해, 그 ClassLoader가 로드한 클래스 메타데이터와 객체들이 계속 메모리에 남아 있는 문제
기존 문제점
ClassLoader leak ↓ PermGen OOM ↓ 서버 죽음
Metaspace는 GC와 메모리 확장이 더 유연
TLAB (Thread Local Allocation Buffer)
Bump-the-pointer Allocation
JVM의 Young Generation은 대부분 연속된 메모리 공간이기 때문에 objectSize 크기만큼 포인터를 더하면 bump 위치를 찾을수 있습니다.
Generational GC 전략
생명주기로 gc를 분류하였습니다. 대부분의 객체는 Eden에서 생성되고 바로 GC됩니다.
new → Eden → Survivor → Old (long-lived)
Escape Analysis + Scalar Replacement
JIT 컴파일러가 객체 자체를 제거하는 경우도 있습니다.
객체 생성 흐름