본문 바로가기
관리자

Programming-[Backend]/Java

Non-Heap Usage

728x90
반응형

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은 조건부로 정리 가능

728x90
반응형