JVM Option 지정하기.
1. Standard Option
-client : Desktop용 애플리케이션을 구동하는데 유리
성능최적화에 필요한 모든 과정을 최대한으로 수행
-server : Server용 애플리케이션을 구동하는데 유리
시작시간은 느리나, 일정 시간이 흐르면 클라이언트보다 우수하다.
-d32 : 32bit JVM을 사용한다. 메모리를 최대 2G까지만 사용가능하다
일반적 수행은 64bit JVM보다 뛰어난 경우가 많아 64bit 라고 해도 자주 사용.
-d64 : 64bit JVM을 사용한다. 메모리 크기에는 사실상 제한이 없다.
대형 애플리케이션의 경우 자주 이용.
2. -X 옵션 (Non-Standard Option)
-Xms : Java Heap의 최초크기를 지정.
크기의 동적인 변경에 의한 오버헤드를 최소화 하려면 최대크기와 동일하게 부여할것.
-Xmx : Java Heap의 최대 크기를 지정.
3. -XX 옵션 (Non-Standard Option)
-XX옵션중 Boolean 유형은 접두어로 '+'일경우 활성화(Enable) '-'일 경우 비활성화(Disable)
-XX:+CMSIncrementalMode (Default: False)
Full GC작업을 Incremental하게 진행
이 옵션이 활성화 되면 Old Generation의 사용률과 무관하게 백그라운드에서 점진적으로 Old Generation에 대한 GC 작업을 수행한다.
이 옵션을 활성화하면 Throughput은 다소 줄어들고, Response Time은 좀 개선되는 경향이 있다.
따라서 GC 작업 Pause를 더 줄이고 싶을 경우에 사용할 수 있다.
-XX:CMSInitiationOccupancyFraction=<value> (Default: -1)
CMS Collection이 시작되는 임계값을 결정
만일 이 값이 "50"이면 Old Generation이 50% 이상 사용되면 Concurre Full GC가 시작된다.
임계값을 고정하고자 할때는 UseCMSInitiationOccupancyOnly 옵션을 활성화 해야한다.
이 옵션의 값이 작으면 CMS COllection이 그만큼 빨리 동작하기 때문에 Promotion Failure에 의한 Stop The World GC 작업이 발생할 확률이 그 만큼 줄어든다.
-XX:+CMSPermGenSweepingEnabled (Default: False)
CMS Collector는 기본적으로 Permanent Generation에 대해 Collection을 수행하지 않는다.
따라서 많은 클래스를 로딩하는 경우 Out Of Memory Error가 발생할 수 있다.
이 옵션을 활성화 하면 Permanent Generation에 대한 Collection을 수행한다.
-XX:+GCHeapFreeLimit=<Percentage> (Default: 5)
Parallel Collector를 사용할 때 GC도중 Out Of Memory Error의 발생을 방지하는데 도움을 준다.
GC로 확보해야 할 Free Space의 하한선을 결정.
이 값은 MAx Heap크기에 대한 Free 공간 크기의 비율이며 기본값은 "5"
적어도 Max Heap 크기의 5% 이상이 되도록 Free Space를 보장하는것.
-XX:GCTimeLimit=<Percentage> (Default: 90)
Parallel Collector를 사용할 때 GC GC도중 Out Of Memory Error의 발생을 방지하는데 도움을 준다.
전체 JVM수행 시간대비 Parallel Collection 수행시간의 상한선을 결정. 기본값은 90%
즉, Parallel Collection이 전체 수행 시간의 90%까지 사용할 수 있게 된다.
-XX:MinHeapFreeRatio=<value> (Default: 40)
Heap Expansion을 수행하는 임계치를 지정한다. 이 값이 40이면 Heap의 Free 공간이 40% 미만이 되면 Heap 크기가 확대된다.
MaxHeapFreeRatio옵션과 함께 Heap의 크기 조정을 담당한다.
-XX:MaxHeapFreeRatio=<Value> (Default: 70)
Heap Shrinkage를 수행하는 임계치를 지정. 이 값이 70이면 Heap의 Free 공간이 70% 이상이 되면 Heap 크기가 축소된다.
MinHeapFreeRatio옵션과 함께 Heap의 크기 조정을 담당한다.
-XX:NewSize=<Value> (Default: OS/JDK 버전마다 다름)
Young Generation의 시작크기를 지정한다.
-XX:MaxNewSize=<value> (Default: None)
Young Generation의 최대 크기를 지정한다.
Young Generation의 시작크기는 NewSize옵션에 의해 지정된다.
-XX:NewRatio=<value> (Default: OS/JDK 버전마다 다름)
Young Generation과 Old Generation의 비율을 결정한다.
이 값이 2 이면 Young:Old = 1:2가 되고. Young Generation의 크기는 전체 Java Heap 의 1/3이 된다.
Intel Client에서 12
기타 머신에서 8 이라고 레퍼런스에 되어있다고 한다.
-XX:ParallelGCThreads=<Value> (Default: CPU 개수)
Parallel Collector를 사용할 경우, GC작업을 수행할 스레드의 갯수를 지정한다.
기본값은 CPU의 개수.
하나의 머신에서 여러종류의 애플리케이션이 공유해서 사용하는 환경에서는 이 옵션의 값을 낮게 설정해서 GC 스레드의 개수를 줄임으로서 성능 개선을 꾀할수 있다.
-XX:Permsize=<size> (Default: )
Permanent Generation의 최초 크기를 지정한다.
이 크기가 작아서 클래스를 로딩하지 못하면 Out Of Memory Error가 발생
-XX:MaxPermSize=<Value>
Permanent Generation의 최대 크기를 지정한다.
크기를 크게 해주는것이 좋다.
-XX:SurvivorRatio=<Value> (Default: 5~6, but OS/JDK 버전 마다 다름)
Survivor Space크기가 크면 Tenured Generation으로 옮겨가기전의 중간 버퍼영역이 커진다.
따라서 Full GC의 빈도를 줄이는 역할을 할 수 있다.
반면 Eden Space의 크기가 줄어들므로 Minor GC가 자주 발생하게 된다.
-XX:+UseConcMarkSweepGC (Default: False)
CMS Collector를 사용할 지의 여부를 지정한다.
GC Pause에 의한 사용자 응답시간 저하 현상을 줄이고자 할 경우에 사용이 권장된다.
-XX:+UseParallelGC (Default: 환경에 따라 다름)
Parallel Collector를 사용할 지 여부를 지정.
JDK 1.5 부터는 서버급 머신인 경우 True 클라이언트급 머신일경우 False가 기본값
서버급 머신이란 CPU가 2개이상. 물리 RAM이 2G 이상인 머신.
큰 크기의 Young Generation이 일반적인 엔터프라이즈 환경에서는 Parallel Colector를 사용함으로서 Minor GC에 의한 GC Pause를 최소화 할 수 있다.
Parallel Collector는 Young Generation에 대해서만 작동한다.
따라서 Old Generation에 대해 Parallel Collector을 사용하고자 한다면 UseParallelOldGC옵션을 이용한다.
-XX:+UseParallelOldGC (Default: False)
Old Generation에 대해 Parallel Collection을 수행할지의 여부를 지정.
-XX:+UseParNewGC (Default: 환경에 따라 다름)
CMS Collector를 사용하는 경우에 한해서, Young Generation에 대해서 Parallel Collection을 시행할지의 여부를 지정한다.
-XX:+UseSerialGC (Default: 환경에 따라 다름)
Serial Collector를 사용할 지의 여부를 지정.
'이것저것 배운것 > JAVA 공부중' 카테고리의 다른 글
JButton으로 종료시키기 (0) | 2015.09.19 |
---|---|
난수를 발생시키는 2가지 방법. (0) | 2015.07.27 |
Static URL Path Download (0) | 2015.07.09 |
Java GUI. 프레임을 화면 중앙에 출력하기 (0) | 2015.06.02 |
system.out.println (0) | 2013.12.31 |