source

기본 최대 Java 힙사이즈는 어떻게 결정됩니까?

nicesource 2022. 11. 24. 20:42
반응형

기본 최대 Java 힙사이즈는 어떻게 결정됩니까?

-Xmxn기본값이 사용됩니다.Java 문서에 따라

"시스템 구성에 따라 런타임에 기본값이 선택됨"

디폴트치에 영향을 주는 시스템 구성 설정은 무엇입니까?

Windows 에서는, 다음의 커맨드를 사용하고, 애플리케이션이 실행되고 있는 시스템의 디폴트를 확인할 수 있습니다.

java -XX:+PrintFlagsFinal -version | findstr HeapSize

도 선택지를 .MaxHeapSize)-Xmx 및 )의 개요InitialHeapSize★★★★★★에-Xms.

Unix/Linux 시스템에서는 다음을 수행할 수 있습니다.

java -XX:+PrintFlagsFinal -version | grep HeapSize

결과 출력은 바이트 단위라고 생각합니다.

Java SE 5의 경우: Garbage Collector 인체공학 [Oracle]에 따라:

초기 힙 크기:

시스템의 물리적 메모리의 64분의 1보다 크거나 적당한 최소값입니다.J2SE 5.0 이전에는 기본 초기 힙사이즈는 플랫폼에 따라 다른 적당한 최소 크기였습니다.-Xms 명령줄 옵션을 사용하여 이 기본값을 재정의할 수 있습니다.

최대 힙 크기:

물리 메모리의 4분의 1 또는1 GB보다 작습니다.J2SE 5.0 이전 버전의 기본 최대 힙 크기는 64MB였습니다. -Xmx 명령줄 옵션을 사용하여 기본값을 재정의할 수 있습니다.

갱신:

Tom Anderson이 지적한 바와 같이 위의 내용은 서버급 기계용입니다.5.0 JavaTM Virtual Machine의 인체공학:

J2SE 플랫폼 버전 5.0에서는 서버 클래스 머신이라고 불리는 머신 클래스는

  • 2개 이상의 물리 프로세서
  • 2 GB 이상의 물리 메모리

Windows 운영체제버전을 실행하고 있는32비트 플랫폼 제외기타 모든 플랫폼에서는 디폴트값이 버전 1.4.2의 디폴트값과 동일합니다.

J2SE 플랫폼 버전 1.4.2에서는 기본적으로 다음과 같이 선택되었습니다.

  • 4 MB의 초기 힙 크기
  • 최대 힙 크기 64MB

Java 8은 Xmssize(Minimum HeapSize)의 경우 물리 메모리의 64분의 1 이상사용하고 -Xmxsize(Maximum HeapSize)의 경우 물리 메모리의 1/4 미만을 사용합니다.

다음과 같이 기본 Java 힙 크기를 확인할 수 있습니다.

Windows 의 경우:

java -XX:+PrintFlagsFinal -version | findstr /i "HeapSize PermSize ThreadStackSize"

Linux의 경우:

java -XX:+PrintFlagsFinal -version | grep -iE 'HeapSize|PermSize|ThreadStackSize'

디폴트치에 영향을 주는 시스템 구성 설정은 무엇입니까?

머신의 물리 메모리와 Java 버전.

는 Java 6 업데이트 18에서 변경되었습니다.

물리 메모리가 1GB를 넘는다고 가정하면(요즘에는 꽤 일반적입니다), 서버 VM의 물리 메모리는 항상 물리 메모리의 4분의 1입니다.

드디어!

Java 8u191 에서는, 다음의 옵션을 사용할 수 있게 되었습니다.

-XX:InitialRAMPercentage
-XX:MaxRAMPercentage
-XX:MinRAMPercentage

사용 가능한 물리 RAM의 퍼센티지로 히프의 사이징에 사용할 수 있습니다(이는 설치된 RAM이 커널에서 사용하는 메모리보다 작음).

자세한 내용은 Java8 u191용 릴리스 노트를 참조하십시오.옵션은 Docker라는 제목 아래에 기재되어 있지만 실제로는 Docker 환경 또는 기존 환경 모두에 적용됩니다.

" " "MaxRAMPercentage25%로 하다. 입니다.이것은 매우 보수적이다.

나만의 규칙:호스트가 어느 정도 특정 Java 애플리케이션 실행에 전념하고 있다면 문제 없이 대폭 증가할 수 있습니다.Linux에서 표준 데몬만 실행하고 있으며 RAM을 약 1Gb 이상에서 설치했다면 JVM 힙에 75%를 사용하는 것을 주저하지 않을 것입니다.다시 말씀드리지만, 이것은 장착된 RAM이 아니라 사용 가능한 RAM의 75%입니다.남은 것은 호스트에서 실행 중인 다른 사용자 랜드 프로세스와 JVM에 필요한 다른 유형의 메모리(스택용)입니다.이 모든 것을 종합하면 일반적으로 남은 25%에 적합합니다.RAM이 더 많이 설치되면 75%가 더 안전하고 안전해집니다.(JDK 담당자가 사다리를 지정할 수 있는 옵션을 구현했으면 좋았을 텐데)

의 설정MaxRAMPercentage을 사용하다

java -XX:MaxRAMPercentage=75.0  ....

이 백분율 값은 '이중' 유형이기 때문에 소수점을 사용하여 지정해야 합니다."75.0" 대신 "75"를 사용하면 다소 이상한 오류가 발생합니다.

에르네스토 말이 맞아요그가 올린 링크에 따르면 [1]:

클라이언트 JVM 힙 구성 업데이트

클라이언트 JVM에서...

  • 기본 최대 힙 크기는 최대 192MB의 물리적 메모리 크기까지 물리적 메모리의 절반이며, 그렇지 않으면 최대 1GB의 물리적 메모리 크기까지 물리적 메모리의 4분의 1입니다.

    예를 들어 시스템에 128MB의 물리적 메모리가 있는 경우 최대 힙 크기는 64MB이고 물리적 메모리가 1GB 이상이면 최대 힙 크기는 256MB가 됩니다.

  • 프로그램에서 필요한 개체를 충분히 만들지 않는 한 최대 힙 크기는 실제로 JVM에서 사용되지 않습니다.초기 힙 크기라고 하는 훨씬 적은 양이 JVM 초기화 중에 할당됩니다.

  • ...
  • 서버 JVM 힙 구성의 인체공학은 현재 클라이언트와 동일합니다.단, 32비트 JVM의 기본 최대사이즈는 1기가바이트로 물리 메모리 사이즈는 4기가바이트, 64비트 JVM은 32기가바이트로 물리 메모리 사이즈는 128기가바이트입니다.

[1] http://www.oracle.com/technetwork/java/javase/6u18-142093.html

Xms ★★★★★★★★★★★★★★★★★」Xmx Machine Java Virtual Machine) : Java Virtual Machine(JVM; Java 가상 머신)입니다.

  • Xmsinitial and minimumJVMheap size
    • Format-Xms<size>[g|G|m|M|k|K]
    • Default Size다음과 같습니다.
      • -server메모리의 및 <=): "사용 가능한 물리 메모리의 25%, =8MB" <=64MB
      • -client mode메모리의 % (= 8 이상)및 <= MB: 사%%% 25% (= 8 MB 、 16 MB )
    • Typical Size다음과 같습니다.
      • -Xms128M
      • -Xms256M
      • -Xms512M
    • Function/Effect다음과 같습니다.
      • 은 allocate -> JVM allocate로 합니다.Xms memory (메모리 크기)
  • XmxmaximumJVMheap size
    • Format-Xmx<size>[g|G|m|M|k|K]
    • Default Size다음과 같습니다.
      • <= R27.2
        • Windows75% '최대'입니다.1GB
        • Linux/Solaris50% 1GB
      • >= R27.3
        • Windows X6475% '최대'입니다.2GB
        • Linux/Solaris X6450% 2GB
        • Windows x8675% '최대'입니다.1GB
        • Linux/Solaris X8650% 1GB
    • Typical Size다음과 같습니다.
      • -Xmx1g
      • -Xmx2084M
      • -Xmx4g
      • -Xmx6g
      • -Xmx8g
    • Function/Effect다음과 같습니다.
      • ->하면 최대 가능 -> JVM을 사용할 수 있습니다Xmx메모리 크기 조정
        • Xmx,할 것이다java.lang.OutOfMemoryError
          • ★★★의 수정 OutOfMemoryError무슨 일입니까?
            • 하다Xmx가치
              • : from: " " "-Xmx4g로로 합니다.-Xmx8g

상세

공식 문서 참조: -X 명령줄 옵션

IBM JVM의 경우 명령어는 다음과 같습니다.

java -verbose:sizes -version

Java 8용 IBM SDK에 대한 자세한 내용은 http://www-01.ibm.com/support/knowledgecenter/SSYKE2_8.0.0/com.ibm.java.lnx.80.doc/diag/appendixes/defaults.html?lang=en를 참조하십시오.

기본값은 시스템 구성에 따라 런타임에 선택됩니다.

매뉴얼 페이지를 참조해 주세요.

기본 힙 크기

명령줄에 초기 힙사이즈 및 최대 힙사이즈가 지정되어 있지 않은 경우, 머신상의 메모리량에 근거해 계산됩니다.

  1. 클라이언트 JVM 기본 초기 및 최대 힙 크기:

    기본 최대 힙 크기는 최대 192MB의 물리적 메모리 크기까지 물리적 메모리의 절반이며, 그렇지 않으면 최대 1GB의 물리적 메모리 크기까지 물리적 메모리의 1/4입니다.

  2. 서버 JVM 기본 초기 및 최대 힙 크기:

    32비트 JVM의 경우 물리 메모리가 4GB 이상인 경우 기본 최대크기는 최대 1GB가 될 수 있습니다.64비트 JVM에서는 128GB 이상의 물리 메모리가 있는 경우 기본 최대 히프 사이즈는 최대 32GB가 될 수 있습니다.

디폴트치에 영향을 주는 시스템 구성 설정은 무엇입니까?

-Xms(초기 힙 크기) 및 -Xmx(최대 힙 크기) 플래그를 사용하여 초기 및 최대 힙 크기를 지정할 수 있습니다.애플리케이션이 정상적으로 동작하기 위해서 필요한 힙의 양을 알고 있는 경우는, -Xms-Xmx 를 같은 값으로 설정할 수 있습니다.

생성 크기에 영향을 주는 파라미터는 여러 가지가 있습니다.다음 그림은 힙 내의 커밋된 공간과 가상 공간의 차이를 보여 줍니다.가상 시스템을 초기화할 때 힙의 전체 공간이 예약됩니다.는 ""로 할 수 .-Xmx「」. 「」의 -Xms 변수가 보다 작습니다.-Xmx예약된 모든 공간이 가상 시스템에 즉시 커밋되는 것은 아닙니다.커밋되지 않은 공간은 이 그림에서 "가상"으로 표시됩니다.히프의 다른 부분(영구 세대, 테넌트 세대 및 젊은 세대)은 필요에 따라 가상 공간의 한계까지 확장할 수 있습니다.

여기에 이미지 설명 입력

기본적으로 가상 시스템은 각 수집에서 힙을 늘리거나 축소하여 각 수집에서 활성 개체에 대한 사용 가능한 공간의 비율을 특정 범위 내에서 유지하려고 시도합니다. - 에 됩니다.XX:MinHeapFreeRatio=<minimum> ★★★★★★★★★★★★★★★★★」-XX:MaxHeapFreeRatio=<maximum>는 아래에 , 라고 표현합니다.-Xms<min> 이상-Xmx<max>.

파라미터의 디폴트값

MinHeap FreeRatio 40

Max Heap Free Ratio 70

- Xms 3670k

- Xmx64 m

64비트 시스템에서 힙 크기 매개 변수의 기본값은 약 30%까지 확장되었습니다.이 증가는 64비트 시스템에서 더 큰 크기의 개체를 보완하기 위한 것입니다.

이러한 파라미터를 사용하면 세대 내 빈 공간 비율이 40% 미만으로 떨어지면 세대는 최대 허용 크기까지 40%의 빈 공간을 유지하도록 확장됩니다.마찬가지로 빈 공간이 70%를 초과하면 세대의 최소 크기에 따라 공간의 70%만 빈 공간이 되도록 세대가 수축됩니다.

대규모 서버 애플리케이션에서는, 이러한 디폴트로 2개의 문제가 발생하는 경우가 있습니다.첫 번째는 시작 속도가 느린 것입니다.이는 초기 힙이 작기 때문에 많은 주요 컬렉션에 걸쳐 크기를 조정해야 하기 때문입니다.더 시급한 문제는 대부분의 서버 애플리케이션에서 기본 최대 힙사이즈가 터무니없이 작다는 것입니다.서버 애플리케이션의 경험적 규칙은 다음과 같습니다.

  • 일시 중지 문제가 없는 한 가상 시스템에 가능한 한 많은 메모리를 부여해 보십시오.기본 크기(64MB)가 너무 작은 경우가 많습니다.
  • -Xms와 -Xmx를 동일한 값으로 설정하면 가상 시스템에서 가장 중요한 크기 결정을 제거하여 예측 가능성이 높아집니다.그러나 잘못된 선택을 하면 가상 시스템이 보정될 수 없습니다.
  • 일반적으로 할당은 병렬화할 수 있으므로 프로세서 수를 늘릴수록 메모리를 늘립니다.

    전문이 있다

언급URL : https://stackoverflow.com/questions/4667483/how-is-the-default-max-java-heap-size-determined

반응형