💡 개요
OKKY 글을 보다가 아래 문장을 봤다.
부하 테스트를 진행하는데, Commited heap 메모리가 자꾸 감소해서 GC가 심각하게 증가…
JVM Eden 영역은 뭐고, Commited Heap 메모리는 뭐고, 왜 Commited Heap 메모리가 감소해서 GC가 증가할까..?
🛠️ JVM Eden 영역
JVM Eden 영역은 Young Generation 내의 세 영역 중 하나로, 객체가 생성되어 처음으로 할당되는 공간이다.
Young Generation이란 객체가 생성되고 짧은 생명주기, 즉 금방 삭제되는 객체를 보관하는 공간이다.
- Eden : 생성된 객체가 처음 저장되는 곳
- S0, S1 : Eden에서 살아남은 객체가 이동하는 곳
대부분의 객체는 Eden 영역에서 빠르게 생성되었다가 곧 GC를 통해 삭제된다.
그 중에서 살아남은 객체는 Survivor 영역(S0, S1)으로 이동하고, 일정 횟수 이상 살아남은 객체는 Old Generation으로 승격한다.
(참고) Suvivor 영역과 Old Genertaion 영역의 차이
Survivor 영역의 객체는 금방 삭제되는 객체가 머무르는 공간이다.
Old Generation은 오랜 GC에 살아남은 객체가 저장되는 공간이다.
이 둘의 가장 큰 차이는 GC에 소모되는 비용이다.
Survivor 영역의 객체는 GC가 자주 발생하기 때문에 적은 비용이 든다. (임시 데이터 느낌)
하지만 Old Generation은 속도가 느린 Full GC가 수행될 수 있기 때문에 더 많은 시간과 리소스가 소모된다.
🛠️ Commited Heap 메모리
Commited Heap 메모리란 JVM이 현재 Heap 영역(Young + Old Generation)에서 운영체제로부터 할당받아 사용 중인 메모리 공간을 의미한다.
뭐야.. 그냥 메모리 공간이었잖아..?
🛠️ Commited Heap 메모리 감소 → GC 증가?
GC가 증가한다는게 개발자 입장에선 그리 반가운 소식은 아니다.
왜냐하면 그 만큼 JVM이 수행하는 작업이 증가하기 때문이다.
그런데 Commited Heap의 메모리가 줄어들면 그 만큼 사용할 수 있는 메모리 공간이 줄어든다.
그럼 JVM은 사용 가능한 메모리 공간을 확보하기 위해 GC을 수행한다.
이게 반복되면 결국 성능 저하로 이어진다.
'개발 일기' 카테고리의 다른 글
[개발 일기] 2025.07.05 - _ ? (0) | 2025.07.05 |
---|---|
[개발 일기] 2025.07.04 - 단위 테스트는 열린 창문만 이용하기! (0) | 2025.07.04 |
[개발 일기] 2025.07.02 - SSL 암호화하면 헤더도 암호화되나요? (1) | 2025.07.02 |
[개발 일기] 2025.07.01 - boolean 타입을 리턴할 때 is 조심! (Feat: @Getter) (1) | 2025.07.01 |
[개발 일기] 2025.06.30 - 딥링크는 전역 위치에서 사용하세요 (1) | 2025.06.30 |