홈 › 고급 › 10 / 10

JVM 메모리·GC·OOM 진단

힙은 어떻게 생겼고, 무엇이 남고, 터지면 어디를 보는가
섹션 7진행 0 / 10

7. 정리

  • 힙은 Young(Eden·Survivor) 과 Old 로 나뉘고, 대부분의 객체는 Eden 에서 태어나 첫 GC 에 사라집니다.
  • GC 는 GC 루트에서 도달할 수 없는 객체만 치웁니다. 누수는 "안 쓰지만 도달되는" 참조입니다.
  • -Xmx 는 힙만 제한합니다. 컨테이너에서는 MaxRAMPercentage 로 여유를 둡니다.
  • Serial·Parallel 은 처리량, G1 은 균형, ZGC 는 정지 시간입니다. 웹 서버는 G1 기본값으로 시작합니다.
  • GC 로그의 A->B(C) 에서 A 와 B 가 같으면 전부 살아 있는 것이고, 반복되면 OOM 이 옵니다.
  • -Xlog:gc, -XX:+HeapDumpOnOutOfMemoryError, -XX:+ExitOnOutOfMemoryError 는 운영 JVM 의 기본 장비입니다.
  • 박싱과 문자열은 원시 배열의 5~14배 크기입니다. 대량 데이터는 record 와 원시 배열로 듭니다.