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이하로 설정하는 것이 좋음) |
반응형