아이디어 설치 디렉토리를 열고 두 개의 vmoptions 파일이있는 빈 디렉토리가 있는지 확인하십시오.
32 비트 : idea.exe.vmoptions
64 비트 : idea64.exe.vmoptions
-xms512m -xmx1024m -xx : maxpermsize = 512m -xx : reservedcodecachesize = 225m -xx :+useconcmarksweepgc -xx : softrefluplolicymspermb = 50 -ea -dsun.io.usecanoncaches = false -djava.net.preipv4stack = true
위 목록은 idea64.exe.vmoptions 의 기본 내용이며 필요에 따라 수정할 수 있습니다.
각 매개 변수의 의미는 다음과 같습니다.
1. JVM 메모리 설정을 설정합니다
1. JVM 메모리를 설정하는 데 네 가지 매개 변수가 있습니다.
-xmx java 힙 최대 값, 기본값은 물리적 메모리의 1/4입니다. 최적의 설정 값은 컴퓨터의 물리적 메모리 크기 및 기타 메모리 오버 헤드에 따라야합니다.
-XMS Java 힙 초기 값. 서버 JVM이 -xms 및 -xmx를 동일한 값으로 설정하는 것이 가장 좋습니다. 개발 및 테스트 머신의 JVM은 기본값을 유지할 수 있습니다.
-XMN Java 힙 젊은 지역 크기, 친숙하지 않은 경우 기본값을 유지하는 것이 가장 좋습니다.
-xss 각 스레드의 스택 크기는 기본값을 익숙하지 않은 경우 기본값을 유지하는 것이 가장 좋습니다.
2. JVM 메모리 할당 설정 방법 :
(1) 명령 프롬프트에서 JVM을 시작하고 사용할 때 (현재 실행중인 클래스 테스트에만 효과적) :
Java -XMX128M -XMS64M -XMN32M -XSS16M 테스트
(2) 통합 개발 환경에서 JVM을 시작하고 사용할 때 (예 : Eclipse) :
에이. Eclipse.ini를 Eclipse의 루트 디렉토리에서 en
-vmargs는 다음이 가상 기계 설정 매개 변수임을 의미합니다. IT의 매개 변수 값을 수정하거나 -xmn 및 -xss를 추가 할 수 있습니다. 또한 eclipse.ini (예 : -xx : permsize = 56m, -xx : maxpermsize = 128m)에서 비가 비자 메모리를 설정할 수 있습니다.
여기에 설정된 매개 변수 값은 다음 구성을 통해 개발 도구의 상태 표시 줄에 표시 할 수 있습니다.
Eclipse 루트 디렉토리에서 파일 옵션 작성 파일 내용은 org.eclipse.ui/perf/showHeapStatus=true 같습니다.
Eclipse의 루트 디렉토리에서 eclipse.ini 파일을 수정하고 처음에 다음 내용을 추가하십시오.
Eclipse를 다시 시작하면 아래 상태 표시 줄에 더 많은 JVM 정보가 있음을 알 수 있습니다.
비. Eclipse-Window-Preferences-Java Installed JRE (현재 개발 환경에서 실행되는 모든 Java 프로그램에 효과적 임)
현재 사용되는 JRE 편집, ENTER : -XMX128M -XMS64M -XMN32M -XSS16M
기음. Eclipse-Run-Run-Java 응용 프로그램 개방 (세트 Java 클래스에만 효과적 임)
메모리 할당 설정 -인수, VM 인수를 입력하려면 클래스를 선택하십시오 : -XMX128M -XMS64M -XMN32M -XSS16M
참고 : 동일한 개발 환경에서 B와 C가 동시에 설정되면 B 설정이 적용되고 다음과 같은 C 설정이 유효하지 않습니다.
개발 환경의 설정은 -xmx256m이고 클래스 테스트의 설정은 다음과 같습니다. -xmx128m -xms64m, 실행 중에 적용되는 설정은 다음과 같습니다.
-Xmx256m -Xms64m
(3) 서버 환경에서 JVM을 시작하고 사용할 때 (예 : Tomcat) (따라서 Java 프로그램은 현재 서버 환경에서 적용) :
에이. 환경 변수 설정 :
변수 이름 : Catalina_opts
가변 값 : -xmx128m -xms64m -xmn32m -xss16m
비. Tomcat의 루트 디렉토리에서 BIN 폴더를 열고 Catalina.bat을 편집하고 �talina_opts% (총 4 곳)를 -xmx128m -xms64m -xmn32m -xss16m으로 바꾸십시오.
2. JVM 메모리 정보를 확인하십시오
runtime.getRuntime (). maxMemory (); // -xmx에 해당하는 최대 메모리
runtime.getRuntime (). Freememory (); // 현재 JVM 무료 메모리
runtime.getRuntime (). TotalMemory (); // 현재 JVM이 차지하는 총 메모리는 현재 JVM 및 Freememory ()에서 사용하는 메모리의 합과 같습니다.
MaxMemory (), Freememory () 및 TotalMemory () 소개 :
MaxMemory ()는 JVM의 최대 메모리이며 -xmx를 통해 설정할 수 있습니다. 기본값은 물리적 메모리의 1/4이고 설정 값은 컴퓨터의 물리적 메모리보다 높을 수 없습니다.
TotalMemory ()는 현재 JVM이 차지하는 총 메모리이며, 그 값은 현재 JVM 및 Freememory ()가 사용하는 메모리의 합과 동일하며, JVM이 메모리가 증가함에 따라 증가합니다.
Freememory ()는 현재 JVM 프리 메모리입니다. JVM은 메모리가 필요할 때만 물리적 메모리를 차지하기 때문에 프리 메모리 ()의 값은 일반적으로 매우 작습니다. JVM의 실제 메모리는 Freememory ()와 같지 않지만 MaxMemory () -TotalMemory ()+Freememory ()와 같아야합니다. JVM 메모리 할당을 설정합니다.
공식 문서를 참조하십시오.
http://docs.sun.com/source/819-0084/pt_tuningjava.html
Java 시작 매개 변수는 세 가지 범주로 나뉩니다.
하나는 표준 매개 변수 (-)이며, 모든 JVM 구현은 이러한 매개 변수의 함수를 구현해야하며 후진 호환 가능합니다.
두 번째는 비표준 매개 변수 (-x)입니다. 기본 JVM은 이러한 매개 변수의 기능을 구현하지만 모든 JVM 구현이 만족되며 후진 호환성이 보장되지는 않는다고 보장하지는 않습니다.
세 번째는 비 안정적인 매개 변수 (-xx)입니다. 이러한 매개 변수의 각 JVM 구현은 다르며 앞으로 언제든지 취소 될 수 있습니다. 주의해서 사용해야합니다.
표준 매개 변수 중에서 더 유용합니다.
말 수가 많은
-Verbose : 수업
JVM의 관련 정보를 출력 클래스로드하면 JVM이 클래스를 찾을 수 없거나 클래스 충돌을보고 할 때 진단에 사용할 수 있습니다.
-Verbose : GC
각 GC의 관련 상황을 출력하십시오.
-버 보스 : JNI
이는 기본 메소드 호출의 관련 상황을 출력하며, 일반적으로 JNI 호출 오류 정보를 진단하는 데 사용됩니다.
비표준 매개 변수를 확장 매개 변수라고도합니다
가장 일반적으로 사용되는 것은입니다
-xms512m JVM을 설정하여 메모리가 512m로 설정되었습니다. 이 값은 쓰레기 수집이 완료 될 때마다 JVM 재 할당 메모리를 피하기 위해 -xmx와 동일하게 설정할 수 있습니다.
-xmx512m, JVM의 최대 메모리를 512m로 설정하십시오.
-xmn200m : 젊은 세대의 크기를 200m로 설정하십시오. 전체 힙 크기 = 젊은 세대 크기 + 구식 크기 + 영구 생성 크기. 영구 생성은 일반적으로 64m 크기가 고정되어 있으므로 젊은 세대를 늘린 후에는 구형 세대의 크기가 줄어 듭니다. 이 값은 시스템 성능에 큰 영향을 미치며 Sun은 공식적으로 전체 힙의 3/8로 구성을 권장합니다.
-XSS128K :
각 스레드의 스택 크기를 설정합니다. JDK5.0 이후, 각 스레드의 스택 크기는 1m이고 과거에는 각 스레드의 스택 크기가 256k입니다. 더 많은 응용 프로그램 스레드는 메모리 크기를 조정해야합니다. 동일한 물리적 메모리 에서이 값을 줄이면 더 많은 스레드가 생성 될 수 있습니다. 그러나 운영 체제는 여전히 프로세스의 스레드 수에 제한이 있으며 약 3000 ~ 5000 범위의 경험 값으로 무한히 생성 할 수 없습니다.
-xloggc : 파일
-verbose : GC 함수와 유사하게 각 GC 이벤트의 관련 상황 만 파일에만 기록합니다. 파일의 위치는 네트워크의 잠재적 인 문제를 피하기 위해 최상의 로컬입니다.
장점 명령이 명령 줄에 동시에 나타나면 -xloggc가 우선합니다.
-xprof
실행되는 프로그램을 추적하고 표준 출력에서 추적 데이터를 출력합니다. 개발 환경 디버깅에 적합합니다.
접두사로 -xx가있는 매개 변수 목록은 JVM에서 불가능할 수 있으며 Sun은 권장되지 않으며 향후 알림없이 취소 될 수 있습니다. 그러나 이러한 매개 변수 중 다수는 실제로 -xx : permsize, -xx : maxpermsize 등과 같이 우리에게 매우 유용합니다.
먼저 행동 매개 변수를 소개하겠습니다.
| 매개 변수 및 기본값 | 설명하다 |
| -xx : -disablexplicitgc | System.gc ()는 금지되어 있습니다. 그러나 JVM의 GC는 여전히 유효합니다 |
| -xx :+maxfdlimit | 파일 설명자 수의 제한을 최대화하십시오 |
| -xx :+scavengebeforefullgc | 차세대 GCS는 전체 GC 실행보다 우선합니다. |
| -xx :+usegcoverheadlimit | OOM을 던지기 전에 JVM에 의해 GC에 소요되는 시간의 비율을 제한하십시오. |
| -xx : -useconcmarksweepgc | 동시 Mark Exchange 알고리즘을 사용하는 구형 세대의 GC |
| -xx : -useparallelgc | 병렬 GC를 활성화합니다 |
| -xx : -useparalleloldgc | 전체 GC에 병렬 처리를 활성화하면 -xx : -useparallelgc가 활성화되면이 항목이 자동으로 활성화됩니다. |
| -xx : -useserialgc | 직렬 GC 활성화 |
| -xx :+usethreadpriorities | 로컬 스레드 우선 순위를 활성화합니다 |
위 표에서 굵게의 세 가지 매개 변수는 JVM에서 GC 실행을 나타냅니다.
일련의 일련, 평행 및 동시성의 세 가지 방법이 있습니다.
SerialGC는 JVM의 기본 GC 메소드입니다. 일반적으로 소규모 응용 프로그램 및 단일 프로세서에 적합합니다. 알고리즘은 비교적 간단하고 GC 효율이 높지만 응용 프로그램에 일시 중지 될 수 있습니다.
ParallelGC는 GC 런타임을 말하며 응용 프로그램 작동에 영향을 미치지 않습니다. GC와 앱의 스레드는 동시에 실행되므로 앱의 작동이 최대까지 영향을받지 않도록합니다.
동시성 (ConcmarkSweepGC)은 동시에 GC를 실행하는 여러 스레드를 나타냅니다. 일반적으로 다중 프로세서 시스템에 적합합니다. GC의 효율성을 향상시킬 수 있지만 알고리즘은 복잡하고 시스템이 많이 소비됩니다.
성능 튜닝 매개 변수 목록 :
| 매개 변수 및 기본값 | 설명하다 |
| -XX : BARGEPAGESINEINBYTES = 4M | 자바 힙에 큰 페이지 크기를 설정하십시오 |
| -XX : MaxHeapFreeratio = 70 | GC 이후 자바 힙에서 가장 유휴 금액의 가장 큰 비율 |
| -xx : maxnewsize = size | 새로 생성 된 객체가 차지할 수있는 최대 메모리 값 |
| -xx : maxpermsize = 64m | 이전 세대 객체가 차지할 수있는 최대 메모리 값 |
| -XX : MinHeapFreeratio = 40 | GC 이후 자바 힙에서 유휴 금액의 최소 비율 |
| -xx : newratio = 2 | 새로운 세대의 메모리 용량과 구식의 메모리 용량의 비율 |
| -xx : Newsize = 2.125m | 새로운 세대 개체가 생성 될 때 메모리의 기본값이 차지합니다. |
| -xx : reservedcodecachesize = 32m | 코드가 차지하는 메모리 용량을 유지하십시오 |
| -xx : ThreadStacksize = 512 | 스레드 스택 크기를 설정하십시오. 0 인 경우 시스템 기본값을 사용하십시오. |
| -XX :+USELARGEPAGES | 큰 페이지 메모리를 사용하십시오 |
우리의 일일 성능 튜닝에서, 우리는 기본적으로 위의 대담한 속성을 사용합니다.
디버그 매개 변수 목록 :
| 매개 변수 및 기본값 | 설명하다 |
| -xx : -Citime | 인쇄는 JIT 컴파일에서 시간을 소비합니다 |
| -xx : errorfile =./hs_err_pid <pid> .log | 오류 로그 또는 데이터를 파일에 저장합니다 |
| -xx : -extendeddtraceprobes | Solaris- 특이 적 DTRACE 프로브를 켭니다 |
| -xx : heapdumppath =./java_pid <pid> .hprof | 힙 정보를 내보낼 때 경로 또는 파일 이름을 지정합니다. |
| -xx : -heapdumponoutofMemoryError | OOM을 처음 만날 때 힙에 관련 정보를 내보내기 |
| -더블 엑스: | 치명적인 오류가 나타나면 사용자 정의 명령을 실행하십시오 |
| -xx : OnoutofMemoryError = "<cmd args>; <cmd args>" | OOM을 처음 만날 때 사용자 정의 명령을 실행하십시오. |
| -xx : -printclasshistogram | Ctrl -Break를 만나 후 클래스 인스턴스의 원근 정보 인쇄 JMAP -Histo 함수와 동일합니다. |
| -xx : -printconcurrentlocks | Ctrl -Break를 만나 후 동시 잠금에 대한 관련 정보를 인쇄합니다. |
| -xx : -printcommandlineflags | 명령 줄에 나타나는 마크를 인쇄하십시오 |
| -xx :-프린트 컴파일 | 관련 정보를 인쇄하여 메소드가 컴파일 될 때 |
| -xx : -printgc | GC마다 관련 정보를 인쇄하십시오 |
| -xx : -printgc 세부 사항 | GC마다 세부 사항을 인쇄합니다 |
| -xx : -printgctimestamps | 각 GC의 타임 스탬프를 인쇄하십시오 |
| -xx :-트레 클라스 로딩 | 클래스의로드 정보를 추적하십시오 |
| -xx : -traceclassloadingpreorder | 참조 된 모든 클래스의로드 정보를 추적하십시오 |
| -xx : -traceclassresolution | 상수 수영장 추적 |
| -xx : -traceclassunloading | 추적 클래스 정보 제거 정보 |
| -xx : -traceloaderconstraints | 클래스 로더 제약 조건에 대한 정보 추적 |
요약
위의 것은 JVM을 설정하는 작업 방법입니다. 나는 그것이 당신에게 도움이되기를 바랍니다. 궁금한 점이 있으면 메시지를 남겨 주시면 편집자가 제 시간에 답장을 드리겠습니다. Wulin.com 웹 사이트를 지원해 주셔서 대단히 감사합니다!