java

[Java] JVM 메모리 구조 및 옵션

hs_seo 2019. 6. 4. 16:40

JVM의 메모리 구조를 알아보겠습니다.

메모리 공간

메모리 공간은 크게 힙영역과 힙영역이 아닌 공간으로 구분할 수 있습니다. 힙영역은 사용자가 크기를 정할 수 있는 공간입니다.

  • Method : 클래스, 변수, 함수, 정적 변수, 상수 정보 등이 저장되는 영역. 프로그램 전체에서 공유
  • Stack : 함수 내에서 사용되는 매개변수, 지역변수, 리턴값 등이 저장되는 구역.
  • PC Register: CPU의 Register와 역할이 비슷하고, 현재 수행중인 JVM 명령의 주소값이 저장
  • Native Method Stack: 네이티브 메소드 호출을 위해 할당되는 구역
  • Heap : new 명령어로 생성된 객체가 저장되는 영역. GC의 대상이 되는 영역

힙 영역 구조

힙영역은 가비지 콜렉션(GC)의 대상이 되는 영역입니다. Young, Old, Meta 영역으로 구성됩니다.

  • Young
    • new 로 생성되는 신규 객체의 영역.
    • Eden, S0, S1 로 구성.
    • 마이너 GC의 대상
  • Old
    • Young에서 살아 남은 객체를 저장하는 영역.
    • Full GC의 대상
  • Meta:
    • 클래스 객체의 정보가 보관되는 공간
    • JDK8부터 생성. JDK7 버전까지 Permenant Generation영역(PG)이었음.
    • PG영역의 메모리 누수 방지, GC 성능 개선을 위하여 메모리 구조를 변경
    • PG영역을 Metaspace와 Compressed Class Space영역으로 기능을 분할

힙 영역 메모리 설정

HotSpot JVM의 힙영역을 설정하는 옵션과 설정 방법은 다음과 같습니다.

$ java -Xms1024m -Xmx1024m -XX:NewSize=512m -XX:MaxNewSize=512m -XX:PermSize=512m -XX:MaxPermSize=512m

메모리 옵션

   
옵션 내용
Xms 힙 영역 시작 메모리 사이즈(start)
Xmx 힙 영역 최대 메모리 사이즈(max)
Xmn Eden 영역의 초기 메모리 사이즈
XX:PermSize Permanent Generation의 초기 사이즈
XX:MaxPermSize Permanent Generation의 최대 사이즈
XX:MetaspaceSize 메타 영역의 초기 사이즈
XX:MaxMetaspaceSize 메타 영역의 최대 사이즈
XX:NewSize New 영역의 사이즈
XX:MaxNewSize New 영역의 최대 사이즈
XX:SurvivorRatio New/Survivor영역 비율 (n으로 지정시 Eden : Survivor = 1:n)
XX:NewRatio Young Gen과 Old Gen의 비율 (n으로 지정시 Young : Old = 1:n)
XX:MaxTenuringThreshold 마이너 GC에서 Young 영역에서 Old 영역으로 이동하는 기준 횟수 설정값(15이하로 설정하는 것이 좋음)
반응형