Java SE 6에서 Sun JVM의 기본 최대 힙 크기는 얼마입니까?
Java SE 6에서 Sun JVM의 기본 최대 힙 크기는 얼마입니까 (즉, -Xmx 설정과 동일)?
서버 클래스 기계와 자바 SE 5에 대한 것 같은데 그것의
실제 메모리의 1/4 또는 1GB보다 작습니다.
보너스 질문 : IBM의 JVM에 대해 물어볼 수있는 것 같습니다.
java -verbose:sizes -version
썬의 JVM도 비슷하게 물어볼 수 있습니까?
편집 :
저는 Runtime.getRuntime (). maxMemory를 사용하여 Sun 문서 에서 참조 된 min (physical memory / 4, 1G)을 확인했습니다 .
java 1.6.0_21 이상 ...
$ java -XX:+PrintFlagsFinal -version 2>&1 | grep MaxHeapSize
uintx MaxHeapSize := 12660904960 {product}
min (1G)이 제거 된 것 같습니다.
또는 Windows에서 findstr 사용
C:\>java -XX:+PrintFlagsFinal -version 2>&1 | findstr MaxHeapSize
일부 Java 코드로 요청할 수 있습니다.
long maxBytes = Runtime.getRuntime().maxMemory();
System.out.println("Max memory: " + maxBytes / 1024 / 1024 + "M");
javadoc을 참조하십시오 .
JDK를 사용하면 jinfo를 사용하여 해당 JVM에 연결하고 <PROCESS_ID>
MaxHeapSize 값을 가져올 수도 있습니다.
jinfo -flag MaxHeapSize <PROCESS_ID>
JDK6U18부터 다음은 힙 크기에 대한 구성입니다.
클라이언트 JVM에서 기본 Java 힙 구성이 수정되어 오늘날의 리치 클라이언트 애플리케이션의 성능이 향상되었습니다. 초기 및 최대 힙 크기가 더 크고 세대 별 가비지 수집과 관련된 설정이 더 잘 조정됩니다.
기본 최대 힙 크기는 실제 메모리의 절반에서 최대 192MB의 실제 메모리 크기이고 그렇지 않은 경우 실제 메모리의 1/4에서 최대 1GB의 실제 메모리 크기입니다. 예를 들어 시스템에 128MB의 실제 메모리가있는 경우 최대 힙 크기는 64MB이고 1GB 이상의 실제 메모리는 256MB의 최대 힙 크기가됩니다. 최대 힙 크기는 프로그램이이를 요구하기에 충분한 오브젝트를 작성하지 않는 한 JVM에서 실제로 사용되지 않습니다. 초기 힙 크기라고하는 훨씬 적은 양이 JVM 초기화 중에 할당됩니다. 이 양은 최소 8MB이고 그렇지 않으면 1GB의 실제 메모리 크기까지 실제 메모리의 1/64입니다.
출처 : http://www.oracle.com/technetwork/java/javase/6u18-142093.html
한 가지 방법은 jdk가 설치된 경우 bin 폴더에 jconsole이라는 유틸리티가 있습니다 (visualvm도 사용할 수 있음). 그것을 시작하고 관련 Java 프로세스에 연결하면 힙 크기 설정 및 기타 세부 정보가 무엇인지 확인할 수 있습니다.
헤드리스 또는 CLI 만 실행할 때 해당 서비스를 시작할 때 연결할 포트를 지정하면 jConsole을 LAN을 통해 사용할 수 있습니다.
이 질문에 대답하려면 Java VM이 CLIENT 모드인지 SERVER 모드인지가 중요합니다. "-client"또는 "-server"옵션을 지정할 수 있습니다. 그렇지 않으면 java는 내부 규칙을 사용합니다. 기본적으로 win32는 항상 클라이언트이고 Linux는 항상 서버이지만 여기 표를 참조하십시오.
http://docs.oracle.com/javase/6/docs/technotes/guides/vm/server-class.html
Sun / Oracle jre6u18 doc에서는 re client : 머신이 <= 192MB 인 경우 VM이 물리적 메모리의 1/2을 얻습니다. 머신이 1Gb 미만인 경우 메모리의 1/4; 최대 256Mb. 2Gb phys mem을 사용하는 32 비트 WindowsXP 시스템에서 테스트 한 결과 Java는 문서와 일치하는 256Mb를 할당했습니다.
Sun / Oracle jre6u18 문서에서 re server : client와 동일하고 혼란스러운 언어 추가 : 32 비트 JVM의 경우 기본 최대 값은 1Gb이고 64 비트 JVM의 경우 기본값은 32Gb입니다. 물리적으로 8Gb를 사용하는 64 비트 Linux 시스템에서 테스트 한 결과 Java는 물리적의 1/4 인 2Gb를 할당합니다. 128Gb 물리적 Java가있는 64 비트 Linux 시스템에서는 물리적 Java의 1/4 인 32Gb를 할당합니다.
나를 안내 해준이 게시물에 감사드립니다.
'Program Tip' 카테고리의 다른 글
SELECT DISTINCT가 지정된 경우 ORDER BY 항목이 선택 목록에 나타나야합니다. (0) | 2020.11.27 |
---|---|
Mercurial로 어떻게 "전환"합니까? (0) | 2020.11.27 |
SBT : 기본이 아닌 프로젝트의 기본 클래스에 대한 명령 줄 '실행'을 시작합니다. (0) | 2020.11.26 |
브라우저 뒤로 버튼으로 되돌아 가면 양식의 모든 필드를 지 웁니다. (0) | 2020.11.26 |
속성의 존재를 확인하는 가장 좋은 방법은 무엇입니까? (0) | 2020.11.26 |