Non-Heap Usage
Heap이 아닌 메모리 영역
Metasapce: 클래스 메타 데이터 저장
Code Cache: JIT 컴파일된 네이티브 코드
Compressed Class Space: 압축된 클래스 포인터
Thread Stacks: 각 스레드의 스택 메모리
별도 설정 필요: -XX:MaxMetaspaceSize
클래스 로딩이 많으면 증가 (Spring의 프록시, 동적 클래스 생성 등)
Non-Heap과 트래픽 관계
사용자 접속 증가와 거의 무관
- 클래스/메타데이터는 앱 시작 시 대부분 로드
- 이후 동일 클래스 재사용 (캐시 효과)
- 트래픽 증가 → Heap 사용량 증가 (객체 생성)
- Non-Heap은 거의 일정하게 유지
예외 케이스 (Non-Heap이 증가하는 경우):
- 동적 프록시 과다 생성 (Reflection, CGLIB)
- Groovy/스크립트 언어 런타임 컴파일
- 클래스 로더 누수 (hot deploy 반복 시)
Non-Heap과 GC
기본적으로 GC 대상이 아닙니다. 하지만 완전히 아닌 건 아닙니다.
Metaspace, Code Cache은 조건부로 정리 가능