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

2019. 6. 4. 16:40·java

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이하로 설정하는 것이 좋음)
반응형
저작자표시 비영리 (새창열림)

'java' 카테고리의 다른 글

[java] 메모리 누수와 힙 덤프 분석  (0) 2019.06.05
[java] 자바의 가비지 콜렉션(GC: Garbage Collection)과 jstat을 이용한 모니터링  (0) 2019.06.04
[java] 자바 가상 머신(JVM : Java Virtual Machine)  (0) 2019.06.03
[java] Executor 클래스를 이용한 멀티 스레드 실행 예제  (0) 2019.04.19
[java] 스트림을 이용한 맵리듀스 워드카운트 예제  (0) 2019.04.08
'java' 카테고리의 다른 글
  • [java] 메모리 누수와 힙 덤프 분석
  • [java] 자바의 가비지 콜렉션(GC: Garbage Collection)과 jstat을 이용한 모니터링
  • [java] 자바 가상 머신(JVM : Java Virtual Machine)
  • [java] Executor 클래스를 이용한 멀티 스레드 실행 예제
hs_seo
hs_seo
Hello World!
    반응형
  • hs_seo
    개발자로 살아남기
    hs_seo
  • 전체
    오늘
    어제
    • 전체 (1140)
      • 개발자 (21)
        • 개발에 유의할 점 (0)
        • 면접 (5)
      • IT 소식 (5)
        • 업계 (1)
      • java (51)
        • 디자인패턴 (3)
        • apache-common (1)
      • 개념 (47)
        • 자료구조 (4)
        • 함수형사고 (8)
        • 디자인패턴 (1)
      • 데이터분석 (1)
      • python (67)
        • 코드조각 (12)
        • 라이브러리 (2)
      • 빅데이터 (418)
        • zookeeper (5)
        • hadoop (78)
        • hdfs (12)
        • hive (127)
        • hbase (16)
        • spark (40)
        • scala (4)
        • trino (3)
        • oozie (41)
        • Hue (9)
        • R (5)
        • sqoop (6)
        • flume (3)
        • elasticsearch (2)
        • airflow (16)
        • kafka (3)
        • kubernetes (10)
        • openstack (3)
        • flink (2)
        • redis (2)
      • 빅데이터 강좌 (2)
      • 알고리즘 (131)
        • 알고리즘 (1)
        • 백준 (61)
        • 정올 (41)
        • 더블릿 (5)
        • 프로그래머스 (1)
      • 프로그래밍 언어 (30)
        • go (4)
        • js (9)
        • .Net (6)
        • Jsp (1)
        • ansible (3)
        • terraform (6)
      • Tools (56)
        • docker (2)
        • macbook (6)
        • maven (3)
        • sublime (1)
      • 프레임워크 (25)
        • [JS] angularjs (2)
        • [JS] node.js (19)
        • [Java] spring (2)
        • Android (2)
      • 데이타베이스 (43)
        • SQLD (5)
        • Oracle (1)
        • MySQL (8)
        • ADsP (2)
      • 리눅스 (25)
        • Bash (61)
      • GCP (5)
      • AWS (34)
        • EC2 (2)
        • EMR (14)
      • 정보보안기사 (4)
        • 네트워크 (1)
      • 개인 (80)
        • 업무실수 (0)
        • 책 (9)
        • 교육 (3)
        • 여행 (17)
        • 영화 (12)
        • 음악 (2)
        • 피규어 (4)
        • 게임 (3)
        • 생각 (7)
        • 기타 (10)
        • 좋은글 (5)
        • 좋은 사이트 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
  • 링크

    • 빅데이터-하둡,하이브로 시작하기
    • 빅데이터-스칼라, 스파크로 시작하기
    • Kaggle에서 파이썬으로 데이터 분석 시작하기
    • 쉘스크립트 개발 시작하기
    • 개발자가 데이터 분석 준전문가 되기
    • 데브쿠마
  • 공지사항

  • 인기 글

  • 태그

    airflow
    Linux
    hbase
    HDFS
    build
    다이나믹
    emr
    Hadoop
    하둡
    k8s
    Python
    oozie
    알고리즘
    하이브
    SPARK
    java
    error
    ubuntu
    오류
    HIVE
    S3
    정올
    파이썬
    Tez
    mysql
    백준
    yarn
    bash
    AWS
    nodejs
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
hs_seo
[Java] JVM 메모리 구조 및 옵션
상단으로

티스토리툴바