JVM memory structure

JVM 메모리 구조

크게 힙 영역과 네이티브 영역으로 나뉨

힙 영역에는 객체등이 저장된다. GC가 관리하며 GC를 위해 세대가 나누어져 있다. OS가 관리하는 네이티브 영역에는 메타스페이스, 코드 캐시, 스레드 스택등이 올라간다.

힙 메모리 구조

보통은 Generational GC를 위해 크게 Young과 Tenured(Old) 로 나뉨. JDK 버전 7까지는 힙 내부에 Perm 영역이 있었지만 OOM 이슈가 발생하기 쉬운 문제 등으로 OS가 관리하는 네이티브 메모리 영역의 Metaspace로 옮겨졌다 자세한 건 기계인간님의 글을 참고하자.

GC와 관련된 내용은 GC 문서를 참고하자

Young Gen.

마이너 GC를 수행하는 영역

Eden과 Eden을 정리할때 살아남은 객체들이 들어있는 Survivor 0/1 로 나뉜다.

Tenured Gen.

Major GC를 수행하는 영역

Young에서 넘어온다.

Region..?

CMS(Concurrent Mark-Swep) Collector, Parreral Collector, Serial Collector 등을 사용하면 메모리 영역이 Eden, Survivor 0/1, Old 등으로 딱딱 나뉘지만 G1 Collector를 사용할 경우에는 전체 메모리를 Region으로 나눈 후 각 리전에 역할을 부여하는 방식이기 때문에 경계가 명확하지 않다.

참조

Last updated

Was this helpful?