jstat으로 JVM 메모리 사용을 구경해보자.
JVM에 대해 학습하다보면 gc가 정말 이론대로(?) 움직이는지 궁금해질 때가 있다.
IDE에서의 디버깅으로는 이런 메모리 정보를 직관적으로 알기 어렵다. 그래서 jstat이라는 도구가 있다. 참 좋은 도구다.
1 | jstat -옵션 -JVM pid |
옵션에는 다양한 프로파일링 타겟이 존재한다.
옵션명 | 특징 |
---|---|
class | 클래스 로더 동작 |
gc | heap 영역 전체에 대한 데이터 |
gcnew | New 세대에 대한 데이터 |
등등이 있다. 이중 내가 시도해본 것은 gcnew이다.
위 사진에서 맨 오른쪽 열이 gc counter, 즉 new 영역에 대한 minor GC가 발생한 숫자를 기록하고 있는 부분인데 12에서 13으로 한 개 증가하며 한 칸 왼쪽의 열이 보여주고 있는 Eden의 메모리 사용량이 확 줄어든 것을 볼 수 있었다.
스크린샷에는 잡히지 않았지만 이 때 가득차있던 S0 영역이 완전히 비워지고 S1에 메모리 사용이 잡히기 시작했다. S0, S1 어느 하나는 완전히 비어있어야 한다 는 JVM 이론 시간의 공부가 눈 앞에서 확인되는 순간이었다.
여러분도 집에서 심심할 때 한 번 돌려보시면 좋겠다. 물론 공부하는 입장에서야 심심할 때 해볼 수 있는 일이겠지만 상용 서비스를 개발하는 개발자에게는 중요한 정보일 것이다.