JVM을 시작할 때 -Xms 및 -Xmx 매개 변수는 무엇입니까?


1006

JVM에서 의 사용 XmsXmx매개 변수를 설명하십시오 . 그것들의 기본값은 무엇입니까?


2
-Xmx128m -Xms64m그것을 사용할 때 275mRES mem 주위에 피크 수 있지만 Java를 사용하여 RES mem -Xmx128m -Xms128m주위에 피크 수 있습니다. 가장 550m좋은 것은 GC를 강조하고 무슨 일이 일어나는지 보는 것입니다 ...
Christophe Roussy

답변:


1358

플래그 Xmx는 JVM (Java Virtual Machine)의 최대 메모리 할당 풀을 Xms지정하고 초기 메모리 할당 풀 을 지정합니다.

이는 JVM이 Xms메모리 양 으로 시작되고 최대 Xmx메모리 양 을 사용할 수 있음을 의미합니다 . 예를 들어, 아래와 같이 JVM을 시작하면 256MB의 메모리로 시작하여 프로세스가 최대 2048MB의 메모리를 사용할 수 있습니다.

java -Xms256m -Xmx2048m

메모리 플래그는 킬로바이트, 메가 바이트 등과 같은 다른 크기로 지정할 수도 있습니다.

-Xmx1024k
-Xmx512m
-Xmx8g

Xms플래그는 기본값이 없으며, Xmx일반적으로 2백56메가바이트의 기본 값을가집니다. 이 플래그의 일반적인 용도는을 만날 때 java.lang.OutOfMemoryError입니다.

이러한 설정을 사용할 때 이러한 설정은 JVM의 힙에 대한 것이며 JVM은 에 할당 된 크기보다 더 많은 메모리를 사용할 수 있습니다. 에서 오라클의 설명서 :

JVM은 힙보다 더 많은 메모리를 사용합니다. 예를 들어 Java 메소드, 스레드 스택 및 기본 핸들은 JVM 내부 데이터 구조뿐만 아니라 힙과 별도로 메모리에 할당됩니다.


12
따라서 메모리 사용량이 Xmx를 초과하면 jvm에서 메모리 예외가 발생합니다.
Pankaj 2013

59
네 맞습니다. 메모리 를 초과하려고 할 때 충분한 메모리를 확보하기 위해 가비지를 수집 할 수 있습니다 . 여전히 요청을 만족시키기에 충분한 메모리가없고 힙이 이미 최대 크기에 도달 한 OutOfMemoryError경우 발생합니다.
David Conrad

2
ForkJoin 프레임 워크를 사용할 때 메모리가 너무 많이 사용되어 컴퓨터가 충돌합니다. OpenJDK에서 기본적으로 메모리에 대한 하드 제한이 없습니까?
Christophe De Troyer

6
에서 명확히으로 합니까 자바 -Xmx 1G 1기가바이트 또는 2 ^ 30 B를 의미? via -Xms256m로 시작하는 메모리 양을 명확하게 표현하는 방법 은 "256MB"가 아니라 "256MiB"입니다. 이는 10의 거듭 제곱이 아니라 2 진 거듭 제곱에 의한 것이기 때문입니다. en.wikipedia.org/wiki/Binary_prefix를 참조하십시오 . 또한, 일부 불가능한 공간 서바이버 공간 여분 풀 방치되기 때문에, 실제에있어서 사용 가능한 메모리의 양이 Runtime.getRuntime().maxMemory()적은 -Xmx 통해 지정된 값보다
nealmcb

1
힙 크기와 관련된 일반적인 오류에 대한 유용한 안내서 : blog.paulgu.com/java/6-common-errors-in-setting-java-heap-size
ctrlplusb

313

명령을 실행하면 java -X모든 -X옵션 목록이 표시됩니다 .

C:\Users\Admin>java -X
-Xmixed           mixed mode execution (default)
-Xint             interpreted mode execution only
-Xbootclasspath:<directories and zip/jar files separated by ;>
                      set search path for bootstrap classes and resources
-Xbootclasspath/a:<directories and zip/jar files separated by ;>
                      append to end of bootstrap class path
-Xbootclasspath/p:<directories and zip/jar files separated by ;>
                      prepend in front of bootstrap class path
-Xdiag            show additional diagnostic messages
-Xnoclassgc       disable class garbage collection
-Xincgc           enable incremental garbage collection
-Xloggc:<file>    log GC status to a file with time stamps
-Xbatch           disable background compilation
-Xms<size>        set initial Java heap size.........................
-Xmx<size>        set maximum Java heap size.........................
-Xss<size>        set java thread stack size
-Xprof            output cpu profiling data
-Xfuture          enable strictest checks, anticipating future default
-Xrs              reduce use of OS signals by Java/VM (see documentation)
-Xcheck:jni       perform additional checks for JNI functions
-Xshare:off       do not attempt to use shared class data
-Xshare:auto      use shared class data if possible (default)
-Xshare:on        require using shared class data, otherwise fail.
-XshowSettings    show all settings and continue
-XshowSettings:all         show all settings and continue
-XshowSettings:vm          show all vm related settings and continue
-XshowSettings:properties  show all property settings and continue
-XshowSettings:locale      show all locale related settings and continue

-X 옵션은 비표준이며 사전 통지없이 변경 될 수 있습니다.

나는 이것이 당신이 이해하는 데 도움이 될 수 있도록 Xms, Xmx가장 중요한 것은뿐만 아니라 많은 다른 것들. :)


1
@RupeshYadav
jumping_monkey

18

IDE에서 지정할 수 있습니다. 예를 들어, Eclipse의 구성 실행VM 인수에서 . 다음 -Xmx800m -Xms500m과 같이 입력 할 수 있습니다

여기에 이미지 설명을 입력하십시오


OSX의 RubyMine에서 도움말 메뉴> 사용자 정의 VM 옵션 편집에 있습니다.
존 슈나이더

8
이것은 질문에 대답하지 않습니다. 문제는 설정 방법이 아니라 무엇을위한 것입니다.
Captain Man

@Hearen intellij에서 분리하는 방법 ??

13

질문 자체는 이미 위에서 언급되었습니다. 기본값의 일부만 추가하면됩니다.

http://docs.oracle.com/cd/E13150_01/jrockit_jvm/jrockit/jrdocs/refman/optionX.html

Xmx의 기본값은 시스템에서 사용 가능한 메모리 및 플랫폼에 따라 다릅니다.


8
(하는 JRockit 이외의) 다른 JVM을 들어, JVM의 기본의 -Xmx / XMS 값을 확인하려면이 게시물을 참조 stackoverflow.com/questions/4667483/...
오우거 Psalm33

3

시작시 -Xms 초기 힙 크기이지만 작업 프로세스 중에 힙 크기는 사용자의 비 활동 또는 GC 반복으로 인해 -Xms 보다 작을 수 있습니다 . 최소 힙 크기는 아닙니다.

-Xmx 최대 힙 크기

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.