에서 오라클 설명서를 나는 발견
-Xmxsize 메모리 할당 풀의 최대 크기 (바이트)를 바이트 단위로 지정합니다. 기본값은 시스템 구성을 기반으로 런타임에 선택됩니다.
무엇 않는 시스템 구성은 의미?
에서 오라클 설명서를 나는 발견
-Xmxsize 메모리 할당 풀의 최대 크기 (바이트)를 바이트 단위로 지정합니다. 기본값은 시스템 구성을 기반으로 런타임에 선택됩니다.
무엇 않는 시스템 구성은 의미?
-Xmx
적어도 Java 8에서는 유지되지 않는 것 같습니다 . 왜냐하면 내 Linux 64 비트 시스템에서 총 메모리가 6Gb 인 jvm에는 기본적으로 -Xmx = 1.5Gb가 있기 때문입니다.
답변:
구현 및 버전에 따라 다르지만 일반적으로 사용되는 VM (예 : 클라이언트 또는 서버, 참조 -client
및 -server
매개 변수) 및 시스템 메모리에 따라 다릅니다 .
종종 client
기본값은 실제 메모리의 1/4 또는 1GB (둘 중 더 작은 쪽)입니다.
또한 Java 구성 옵션 (명령 줄 매개 변수)을를 포함한 환경 변수에 "아웃소싱" -Xmx
하여 기본값을 변경할 수 있습니다 (새 기본값 지정). 특히 JAVA_TOOL_OPTIONS
환경 변수는 모든 Java 도구에서 확인하고 존재하는 경우 사용됩니다 (자세한 내용은 여기 및 여기 ).
다음 명령을 실행하여 기본값을 볼 수 있습니다.
java -XX:+PrintFlagsFinal -version
그것은 당신에게 loooong 목록을 제공 -Xmx
에 MaxHeapSize
, -Xms
이다 InitialHeapSize
. 출력을 필터링하거나 (예 : |grep
Linux에서) 검색 할 수 있도록 파일에 저장합니다.
java -XX:+PrintCommandLineFlags
로 현재 시스템 정보를 기반으로 JVM에서 선택한 힙 크기 (및 기타 정보)를 인쇄 할 수 있습니다.
-XX:+PrintFlagsFinal
입니다. 제안한 매개 변수는 저에게 적합하지 않습니다. 대답에 추가하십시오.
-XX:+PrintFlagsFinal
모든 정보를 고려한 후 모든 정보를 표시해야하므로 (수동 옵션 및 인체 공학을 포함하여 ) 죄송합니다 . 하지만 -XX:+PrintCommandLineFlags
내 JVM에서 작동하는 것 같다 (정확한 버전에 따라 수)
java -XX:+PrintFlagsFinal -version | grep HeapSize
앞서 언급했듯이 기본값 -Xmxsize
(Maximum HeapSize)은 시스템 구성에 따라 다릅니다.
Java8 client
은 Xmssize
(Minimum HeapSize)에 대한 물리적 메모리의 -Xmxsize
1/64보다 크고 (Maximum HeapSize)에 대한 물리적 메모리의 1/4보다 작습니다.
즉, 실제 메모리가 8GB RAM 인 경우 Xmssize
8 * (1/6)은 더 크고 -Xmxsize
8 * (1/4) 은 더 작습니다 .
다음을 사용하여 기본 힙 크기를 확인할 수 있습니다.
에서 윈도우 :
java -XX:+PrintFlagsFinal -version | findstr /i "HeapSize PermSize ThreadStackSize"
에서 리눅스 :
java -XX:+PrintFlagsFinal -version | grep -iE 'HeapSize|PermSize|ThreadStackSize'
이러한 기본값은 원하는 양으로 재정의 할 수도 있습니다.
놀랍게도이 질문에는 확실한 문서화 된 답변이 없습니다. 아마도 다른 데이터 포인트는 답을 찾는 다른 사람들에게 가치를 제공 할 것입니다. CentOS (6.8,7.3) 및 Java 8 (빌드 1.8.0_60-b27, 64 비트 서버)을 실행하는 내 시스템 :
기본 메모리는 물리적 메모리의 1/4이며 1GB로 제한되지 않습니다.
또한 -XX:+PrintFlagsFinal
STDERR로 인쇄하므로 위의 다른 사용자가 제시 한 현재 기본 메모리를 결정하는 명령은 다음과 같이 조정되어야합니다.
java -XX:+PrintFlagsFinal 2>&1 | grep MaxHeapSize
64GB의 물리적 RAM이있는 시스템에서 다음이 반환됩니다.
uintx MaxHeapSize := 16873684992 {product}
2019 년 5 월 8 일 현재 :
JVM 힙 크기는 시스템 구성에 따라 다릅니다.
a) 클라이언트 jvm 대 서버 jvm
b) 32 비트 대 64 비트 .
연결:
1) J2SE5.0에서 업데이트 : https://docs.oracle.com/javase/6/docs/technotes/guides/vm/gc-ergonomics.html
2) 간단한 답변 : https://docs.oracle.com/ javase / 8 / docs / technotes / guides / vm / gctuning / ergonomics.html
3) 자세한 답변 : https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/parallel.html# default_heap_size
4) 클라이언트 대 서버 : https://www.javacodegeeks.com/2011/07/jvm-options-client-vs-server.html
요약 : (위의 링크에서 이해하기 어렵습니다. 여기에서 요약하면됩니다.)
1) 클라이언트 jvm의 기본 최대 힙 크기는 256mb입니다 (위의 링크에서 읽은 예외가 있음).
2) 32 비트 서버 jvm의 기본 최대 힙 크기는 1GB이고 64 비트는 32GB입니다 (여기서도 예외가 있습니다. 링크에서 읽으십시오).
따라서 기본 최대 jvm 힙 크기는 위의 VM에 따라 256MB 또는 1GB 또는 32GB 입니다.