본문 바로가기

JAVA

Java - 설정 옵션 (Garbage Collector)

옵션

-server : Java Hotspot Server VM을 선택. Java Hotspot Client VM대비 구동 시간은 오래걸리지만, 이후부터는 빠른 성능을 발휘한다.

(참고: https://docs.oracle.com/javase/7/docs/technotes/guides/vm/server-class.html)

 

-Djava.net.preferIPv4Stack : IP4 사용여부 (boolean)

 

-Dsun.io.useCanonCaches : Java의 정규화 캐시 사용여부 (boolean)

 

-Dfile.encoding : Java 소스파일 인코딩

 

-Djava.awt.headless : 비윈도우 환경에서 GUI 클래스를 사용할 수 있게해주는 옵션

 

GC 관련 옵션

-Xms : JVM시작시 Heap 영역의 크기

ex) -Xms1g

 

-Xmx : 최대 Heap 영역의 크기

ex) -Xms2g

 

-XX:NewRatio : New 영역과 Old 영역의 비율

ex) -XX:NewRatio=2 (New 영역 2, Old 영역 8)

 

-XX:NewSize : New영역의 크기

 

-XX:SurvivorRatio : eden 영역과 survivor 영역의 비율

 

-XX:MetaspaceSize : 자바8이상에 해당(이전은 Permanent이다) - Metaspace영역 사이즈

 

-XX:MaxMetaspaceSize : 자바8이상에 해당(이전은 Permanent이다) - Metaspace영역의 최대 사이즈

 

-XX:+UseSerialGC : Serial GC를 사용

 

-XX:+UseParallelGC : Parallel GC를 사용

 

-XX:+UseParallelOldGC : Parallel Old GC를 사용

 

-XX:+UseConcMarkSweepGC : CMS GC를 사용

 

-XX:+UseG1GC : G1GC를 사용

 

-XX:ParallelGCThreads=N : 스레드 수를 설정한다 (Serial GC는 무효 -애초에 스레드가 1개)

 

-XX:MaxGCPauseMillis=N(ms) : STW 시간의 최대값을 설정. 처리시간이 지정된 N ms를 초과하지않는다

 

-XX:+DisableExplicitGC : System.gc()가 호출되지 않도록 함

 

-verbose:gc : JVM을 가동할때 GC GUI를 사용하여 모니터링할 수 있도록 함

    -XX:+PrintGCDetails (GC 수행 상세 정보를 출력)

    -XX:+PrintGCDateStamps (GC 이벤트 발생 시간 - 년월일 시분초 을 출력한다)

    -XX:+PrintGCTimeStamps (GC 이벤트 발생 시간 - VM 시작후 경과한 시간을 출력)

    -XX:+PrintHeapAtGC (GC 발생시 Heap 상세 정보를 출력)

 

-XX:+HeapDumpOnOutOfMemoryError : OutOfMemoryError 오류가 발생시 heap dump를 생성한다.

    -XX:HeapDumpPath=<경로지정> : heap dump를 생성할 경로를 지정한다. (로그정보를 통해 오류 원인을 분석할 수 있다)

 

-Xloggc:<경로지정> : GC dump를 저장할 경로, 파일명을 설정한다

 

-XX:+PrintAdaptiveSizePolicy : GC 크기에 대한 정보를 출력한다 (G1GC의 경우 Region 정보를 볼 수 있다)

CMS GC관련 옵션

-XX:+UseParNewGC : CMS GC사용시, Young(eden, survivor) 영역에 Parallel GC를 수행한다.

    -XX:+CMSParallelRemarkEnabled : Remark의 Pause Time을 조금 더 줄이기 위해 사용

 

-XX:CMSInitiatingOccupancyFraction=<N> : CMS가 언제(지정 %만큼 힙 영역이 찼을 때) 수집을 시작할지 설정 (default: 75%)

 

-XX:+UseCMSInitiatingOccupancyOnly : 초기 점유 공간을 동적 크기 조정하는 기능이 활성화됨

G1GC관련 옵션

-XX:G1HeapRegionSize : Region의 크기를 지정한다. 1MB~32MB 범위에서 설정 가능. 최소 힙크기를 2048개의 Region으로 나눌 수 있도록 설정해야함

 

-XX:MaxGCPauseMillis : G1GC가 유발하는 STW(Stop-The-World)의 최대시간을 지정. 해당 설정값은 최대한 적용되기 위할뿐, 보장되는 값은 아님 (default: 200)

 

-XX:DefaultMinNewGenPercent : Young(eden, survivor) 영역으로 사용할 힙 최소 크기. 전체 힙 크기 대비 비율을 지정함 (default: 5%)

 

-XX:DefaultMaxNewGenPercent : Young(eden, survivor) 영역으로 사용할 힙 최대 크기. 전체 힙 크기 대비 비율을 지정함 (default: 60%)

 

-XX:ParallelGCThreads : STW 상황에서 GC를 수행하는 스레드 개수를 지정. CPU Core수가 8개 이하인 경우에는, Core수와 동일하게 설정하는 것을 권장

 

-XX:ConcGCThreads : Concurrent Mark 작업을 수행하는 스레드 개수를 지정. ParallelGCThreads의 25%로 설정하는 것을 권장한다.

 

-XX:InitiatingHeapOccupancyPercent : Old Heap의 Region의 지정된 %만큼 용량이 채워졌을 경우, Mark를 시작한다. (default: 45%)

 

-XX:G1OldCSetRegionLiveThresholdPercent : Mixed GC가 시작되는 Old Region 크기를 지정 (default: 65%)

(?) Mixed GC : Full GC를 완료하는 시점에 Young/Old Region을 동시에 GC실행

 

-XX:+UseStringDeduplication : 불필요한 문자열 중복 생성 방지

 

참고자료

- https://d2.naver.com/helloworld/37111

 

- https://blog.ddoong2.com/2019/07/29/IntelliJ-IDEA-%EC%98%B5%EC%85%98/#

 

'JAVA' 카테고리의 다른 글

Java - 자료구조와 컬렉션 프레임워크  (0) 2022.01.23
Java - 빌더 패턴(Builder Pattern)  (0) 2022.01.13
Java - Garbage Collector  (0) 2021.11.01
Java - 데이터 타입(기본타입, 참조타입)  (0) 2021.10.20
Java - Jackson  (0) 2021.09.30