HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
🤩
개발
/
Java
Java
/
💯
Java 기본
/Java 핵심/
💥
JVM에 관하여
/
Garbage Collection

Garbage Collection

OOM 이슈
 

Garbage Collection 확인방법

힙사용량 & GC 현황 파악

jps 를 통해 pid 확인
  1. jstat으로 확인 ( jstat -gcutil <pid> 1s ) [ jstat output 참고 ]
    1. jcmd <pid> GC.heap_info : 힙 사용량 확인
    2. jstat -gccapacity <pid> 1s : 힙 사용량과 전체크기 확인가능 (KB 단위) & GC Count도 같이 확인
  1. 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 영역의 객체들의 참조값을 저장하고 있는 곳
      1. Stack 로컬 변수
      1. Method area의 Static 변수
      1. Native Method Stack의 JNI참조
notion image

GC 실행 과정

notion image