logo

한국어

JVM(Java) 메모리 옵션 정리

관리자 2019.01.03 17:58 조회 수 : 30

1. 최대 성능

JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms1G -Xmx16G -XX:NewSize=256m -XX:MaxNewSize=512m -XX:+DisableExplicitGC"

 

2. 최대 안정 (for WebInspect)

JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms1G -Xmx16G -XX:NewSize=256m -XX:MaxNewSize=512m -XX:+CMSClassUnloadingEnabled -Dsun.rmi.dgc.client.gcInterval=60000 -Dsun.rmi.dgc.server.gcInterval=60000"

 

※ -XX:PermSize=512m -XX:MaxPermSize=512m는 Java 8에서 없어짐.

 

■ Heap영역 : new 연산자로 생성된 객체와 배열을 저장하는 영역으로 GC 대상이 되는 영역이다.

1.Eden, Survivor, Old로 나뉨

* new 키워드로 객체가 생성되면 eden 영역에 저장

* 지속적으로 eden에 객체를 생성하다가 가득 차면 Minor GC(Young GC) 발생

* 쓰레기 객체들은 제거되고 아직 살아있는 객체들은 survivor 영역으로 이동

* 반복되다가 survivor 마저 꽉 차면 old 영역으로 이동

 

■ Non-Heap영역 : 스택, 클래스 area, method area 등의 heap영역을 제외한 나머지들.

Permanent : Class 메타정보, Method 메타정보, Static Object, 상수화된 String Object, Calss관련 배열 메타정보, JVM내부 객체와 최적화컴파일러(JIT)최적화 정보 등 포함

 

-Xms: 초기 Heap Size (init, default 64m)

-Xmx: 최대 Heap Size (Max,  default 256m)

-XX:PermSize: 초기 PermSize

-XX:MaxPermSize: 최대 PermSize

-XX:NewSize: 최소 new size (객체가 생성되어 저장되는 초기공간의 Size로 Eden+Survivor 영역)

-XX:MaxNewSize: 최대 new Size

-XX:SurvivorRatio: New/Survivor영역 비율 (n으로 지정시 Eden : Survivor = 1:n)

-XX:NewRatio: Young Gen과 Old Gen의 비율 (n으로 지정시 Young : Old = 1:n)

-XX:+DisableExplicitGC: System.gc() 콜을 무시

-XX:+UseConcMarkWeepGC: 표준 gc가 아니나 Perm Gen영역도 gc하는 Concurrent Collertor를 사용

-XX:+CMSPermGenSweepingEnabled: Perm gen영역도 GC의 대상이 되도록 지정

 

-XX:+CMSClassUnloadingEnabled: 클래스 데이터도 GC의 대상이 되도록 지정