-Xmxn
Java 명령 행에서 옵션을 생략하면 기본값이 사용됩니다. 자바 문서 에 따르면
“시스템 구성에 따라 런타임시 기본값이 선택됩니다”
어떤 시스템 구성 설정이 기본값에 영향을 줍니까?
답변
Windows에서는 다음 명령을 사용하여 응용 프로그램이 실행되는 시스템의 기본값을 찾을 수 있습니다.
java -XX : + PrintFlagsFinal-버전 | findstr 힙 크기
옵션을 찾습니다 MaxHeapSize
(에 대한 -Xmx
) 및 InitialHeapSize
대한 -Xms
.
유닉스 / 리눅스 시스템에서 할 수있는 일
java -XX : + PrintFlagsFinal-버전 | grep 힙 크기
결과 출력이 바이트 단위라고 생각합니다.
답변
Java SE 5 : 가비지 콜렉터 인체 공학 에 따르면 [Oracle] :
초기 힙 크기 :
머신에서 머신의 물리적 메모리의 1/64보다 크거나 적당한 최소값. J2SE 5.0 이전에는 기본 초기 힙 크기가 합리적인 최소값으로 플랫폼에 따라 다릅니다. -Xms 명령 행 옵션을 사용하여이 기본값을 대체 할 수 있습니다.
최대 힙 크기 :
실제 메모리의 1/4 또는 1GB보다 작습니다. J2SE 5.0 이전의 기본 최대 힙 크기는 64MB입니다. -Xmx 명령 행 옵션을 사용하여이 기본값을 대체 할 수 있습니다.
최신 정보:
Tom Anderson이 자신의 의견에서 지적한 것처럼 위의 내용은 서버급 시스템입니다. 에서 5.0의 JavaTM 가상 머신에서 인간 공학 :
J2SE 플랫폼 버전 5.0에서는 서버 클래스 머신이라고하는 머신 클래스가 다음과 같은 머신으로 정의되었습니다.
- 2 개 이상의 물리적 프로세서
- 2GB 이상의 물리적 메모리
Windows 운영 체제 버전을 실행하는 32 비트 플랫폼을 제외하고. 다른 모든 플랫폼에서 기본값은 버전 1.4.2의 기본값과 동일합니다.
J2SE 플랫폼 버전 1.4.2에서는 기본적으로 다음 항목이 선택되었습니다.
- 4MB의 초기 힙 크기
- 64MB의 최대 힙 크기
답변
자바 8 이상 소요 1 / 64 당신을 위해 실제 메모리를 Xmssize (최소 힙 크기) 미만 1 / 4 귀하에 대한 물리적 메모리의 -Xmxsize (최대 힙 크기).
다음과 같이 기본 Java 힙 크기 를 확인할 수 있습니다 .
에서 윈도우 :
java -XX:+PrintFlagsFinal -version | findstr /i "HeapSize PermSize ThreadStackSize"
에서 리눅스 :
java -XX:+PrintFlagsFinal -version | grep -iE 'HeapSize|PermSize|ThreadStackSize'
어떤 시스템 구성 설정이 기본값에 영향을 줍니까?
머신의 물리적 메모리 및 Java 버전.
답변
이것은 Java 6 업데이트 18 에서 변경되었습니다 .
우리가 1GB 이상의 물리적 메모리를 가지고 있다고 가정하면 (요즘 매우 일반적) 서버 vm에 대한 물리적 메모리의 1/4입니다.
답변
Ernesto가 옳다. 그가 게시 한 링크에 따르면 [1] :
업데이트 된 클라이언트 JVM 힙 구성
클라이언트 JVM에서 …
기본 최대 힙 크기는 실제 메모리의 절반이며 실제 메모리 크기는 192MB이며, 그렇지 않으면 실제 메모리의 1/4은 실제 메모리 크기는 1 기가 바이트입니다.
예를 들어, 시스템에 128MB의 실제 메모리가있는 경우 최대 힙 크기는 64MB이고 실제 메모리의 1 기가 바이트 이상은 최대 힙 크기가 256MB입니다.
프로그램이 충분한 오브젝트를 작성하지 않으면 JVM이 실제로 최대 힙 크기를 사용하지 않습니다. 초기 힙 크기라고하는 훨씬 적은 양이 JVM 초기화 중에 할당됩니다. …
- …
- 서버 JVM 힙 구성 인체 공학은 이제 클라이언트와 동일하지만 32 비트 JVM의 기본 최대 힙 크기는 1 기가 바이트 이고 실제 메모리 크기는 4 기가 바이트이고 64 비트 JVM의 경우 32 기가 바이트입니다 . 실제 메모리 크기는 128 기가 바이트입니다.
[1] http://www.oracle.com/technetwork/java/javase/6u18-142093.html
답변
IBM JVM의 경우 명령은 다음과 같습니다.
java -verbose:sizes -version
IBM SDK for Java 8에 대한 자세한 정보는 http://www-01.ibm.com/support/knowledgecenter/SSYKE2_8.0.0/com.ibm.java.lnx.80.doc/diag/appendixes/defaults.html ? lang = en
답변
드디어!
Java 8u191부터는 다음과 같은 옵션이 있습니다.
-XX:InitialRAMPercentage
-XX:MaxRAMPercentage
-XX:MinRAMPercentage
사용 가능한 실제 RAM의 백분율로 힙 크기를 조정하는 데 사용할 수 있습니다. (커널이 사용하는 RAM이 적은 RAM과 동일).
Java8 u191 릴리스 노트를 참조하십시오. . 옵션은 Docker 제목 아래에 언급되어 있지만 실제로는 Docker 환경이든 기존 환경이든 상관없이 적용됩니다.
의 기본값 MaxRAMPercentage
은 25 %입니다. 이것은 매우 보수적입니다.
내 자신의 규칙 : 호스트가 주어진 Java 응용 프로그램을 실행하는 데 전념하고 있다면 문제없이 크게 증가 할 수 있습니다. Linux에서 표준 데몬 만 실행하고 1Gb 이상에서 RAM을 설치 한 경우 주저하지 말고 JVM 힙에 75 %를 사용하십시오. 다시 말하지만, 이것은 설치된 RAM이 아니라 사용 가능한 RAM의 75 %입니다. . 남은 것은 호스트에서 실행될 수있는 다른 사용자 랜드 프로세스와 JVM에 필요한 다른 유형의 메모리 (예 : 스택)입니다. 모두 함께, 이것은 일반적으로 남은 25 %에 잘 맞습니다. 분명히 더 많은 RAM이 설치되어 있으면 75 %가 더 안전하고 더 안전합니다. (JDK 사람들이 사다리를 지정할 수있는 옵션을 구현했으면 좋겠습니다)
MaxRAMPercentage
옵션 설정은 다음과 같습니다 :
java -XX:MaxRAMPercentage=75.0 ....
이 백분율 값은 ‘double’유형이므로 소수점으로 지정 해야합니다 . “75.0”대신 “75”를 사용하면 다소 이상한 오류가 발생합니다.