Garbage Collection 확인방법
힙사용량 & GC 현황 파악
jps 를 통해 pid 확인
- jstat으로 확인 (
jstat -gcutil <pid> 1s
) [ jstat output 참고 ] jcmd <pid> GC.heap_info
: 힙 사용량 확인jstat -gccapacity <pid> 1s
: 힙 사용량과 전체크기 확인가능 (KB 단위) & GC Count도 같이 확인
- VM flag로 log 남기기
전체 메모리 사용량 파악
ps -p <PID> -o %mem,rss,vsz,cmd
Garbage Collection
- 동적으로 할당한 메모리 영역(Heap)에서 사용하지 않는 메모리를 해제
- GC가 필요한 이유는 메모리 관리를 개발자가 직접 수행하는 경우 아래와 같은 단점이 발생함
- 메모리 누수(사용하지 않는 영역을 해제하지 않음)
- 해제된 메모리에 대한 접근(버그)
- 해제한 매모리 또 해제
- GC가 가지는 단점
- 오버헤드가 발생함
- 개발자가 언제 GC가 메모리를 해제할지 모름
- System.gc()로 명시하였다 하더라도 언제 해제할지를 모른다.
- JVM의 GC는 Mark and Sweep 알고리즘으로 구현됨(순환 참조 문제 해결)
JVM Root Space
- Root Space : Heap 영역의 객체들의 참조값을 저장하고 있는 곳
- Stack 로컬 변수
- Method area의 Static 변수
- Native Method Stack의 JNI참조

GC 실행 과정
