[java] Java 8의 기본 Xmxsize (최대 힙 크기)

에서 오라클 설명서를 나는 발견

-Xmxsize 메모리 할당 풀의 최대 크기 (바이트)를 바이트 단위로 지정합니다. 기본값은 시스템 구성을 기반으로 런타임에 선택됩니다.

무엇 않는 시스템 구성은 의미?



답변

구현 및 버전에 따라 다르지만 일반적으로 사용되는 VM (예 : 클라이언트 또는 서버, 참조 -client-server매개 변수) 및 시스템 메모리에 따라 다릅니다 .

종종 client기본값은 실제 메모리의 1/4 또는 1GB (둘 중 더 작은 쪽)입니다.

또한 Java 구성 옵션 (명령 줄 매개 변수)을를 포함한 환경 변수에 “아웃소싱” -Xmx하여 기본값을 변경할 수 있습니다 (새 기본값 지정). 특히 JAVA_TOOL_OPTIONS환경 변수는 모든 Java 도구에서 확인하고 존재하는 경우 사용됩니다 (자세한 내용은 여기여기 ).

다음 명령을 실행하여 기본값을 볼 수 있습니다.

java -XX:+PrintFlagsFinal -version

그것은 당신에게 loooong 목록을 제공 -XmxMaxHeapSize, -Xms이다 InitialHeapSize. 출력을 필터링하거나 (예 : |grepLinux에서) 검색 할 수 있도록 파일에 저장합니다.


답변

앞서 언급했듯이 기본값 -Xmxsize(Maximum HeapSize)은 시스템 구성에 따라 다릅니다.

Java8 clientXmssize(Minimum HeapSize)에 대한 물리적 메모리의 -Xmxsize1/64보다 크고 (Maximum HeapSize)에 대한 물리적 메모리의 1/4보다 작습니다.

즉, 실제 메모리가 8GB RAM 인 경우 Xmssize8 * (1/6)은 더 크고 -Xmxsize8 * (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:+PrintFlagsFinalSTDERR로 인쇄하므로 위의 다른 사용자가 제시 한 현재 기본 메모리를 결정하는 명령은 다음과 같이 조정되어야합니다.

java -XX:+PrintFlagsFinal 2>&1 | grep MaxHeapSize

64GB의 물리적 RAM이있는 시스템에서 다음이 반환됩니다.

uintx MaxHeapSize                                  := 16873684992      {product}


답변

내 Ubuntu VM에서 총 1048MB의 RAM이 java -XX:+PrintFlagsFinal -version | grep HeapSize인쇄되어 있습니다. uintx MaxHeapSize := 266338304이는 약 266MB이고 전체 RAM의 1/4입니다.


답변

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 입니다.


답변