Java에서 힙 크기 늘리기


276

8GB RAM이있는 Windows 2003 서버 (64 비트)에서 작업하고 있습니다. 힙 메모리를 최대로 늘리려면 어떻게해야합니까? -Xmx1500m플래그를 사용하여 힙 크기를 1500Mb로 늘립니다. 힙 메모리를 실제 메모리의 75 % (6GB 힙)로 늘릴 수 있습니까?


2
시도 했습니까 -Xmx6g? 작동하지 않습니까? 무엇을 관찰 했습니까?
oxbow_lakes

2
힙을 늘리려 고했지만 실패했다고 가정합니다. 64 비트 JVM을 사용하고 있습니까?
Bart Kiers

의견을 주셔서 감사하지만 작동하지 않습니다
Sunil

음-작동하지 않는지 어떻게 알 수 있습니까? JVM이 시작되지 않습니까?
oxbow_lakes

답변:


327

32 비트 시스템에서 4GB로 늘릴 수 있습니다. 64 비트 시스템을 사용하는 경우 더 높아질 수 있습니다. 32 비트 시스템에서 5g를 요청하면 java는 잘못된 값에 대해 불평하고 종료됩니다.

다른 사람들이 게시했듯이 cmd-line 플래그를 사용하십시오.

java -Xmx6g myprogram

java -X를 입력하여 전체 목록 (또는 거의 전체 목록)을 얻을 수 있습니다.


16
Java에서 32b VM (32b 또는 64b 시스템에서 VM이 중요한 부분 임)을 사용하도록 허용하는 실제 힙 크기는 약 2G입니다. 또한, 놀라게 아스 커 먼저 검색하고 찾을 수 없습니다 : stackoverflow.com/questions/1596009/... 과 : stackoverflow.com/questions/37335/...
wsorenson

2
아, 물론 당신은 맞습니다-32 비트 시스템에서는 2Gb의 메모리 만 지정할 수 있습니다.
Steve B.

최대 힙 및 최소 힙 크기가 같아야합니까?
user1747935

1
아니요. 그러나 JVM은 크기 조정에 시간을 낭비 할 수 없기 때문에 사람들이 일반적으로 사용합니다. TBH는 그다지 중요하다고 의심합니다.
Steve B.

1
@PhilipRego는 JVM이 처리 할 수있는 한계까지 원하는대로 설정합니다. -Xmx2G는 메모리를 2G로 설정합니다 (또한 -Xms 참조). 이것은 필요한 메모리 양에 대해 전혀 말하지 않습니다.
Steve B.

155

명령 행 옵션을 사용하여 JVM이 할당 한 힙 크기를 늘릴 수 있습니다. 여기에는 3 가지 옵션이 있습니다.

-Xms<size>        set initial Java heap size
-Xmx<size>        set maximum Java heap size
-Xss<size>        set java thread stack size

java -Xms16m -Xmx64m ClassName

위의 줄에서 최소 힙을 16mb로, 최대 힙을 64mb로 설정할 수 있습니다


28

32 비트 JVM에서 이론적으로 설정할 수있는 가장 큰 힙 크기는 4gb입니다. 더 큰 힙 크기를 사용하려면 64 비트 JVM을 사용해야합니다. 다음을 시도하십시오 :

자바 -Xmx6144M -d64

-d64 플래그는 JVM이 64 비트 모드에서 실행되도록 지시하므로 중요합니다.


당신에게 보스 감사하지만 그것은 내 시스템에서 작동하지 않습니다 내가 놓친 다른 것이 있습니다
Sunil

4
"작동하지 않음"을 정의하십시오. 시작되지 않고 오류가 발생합니까? 시작하지만 다른 힙 크기를 사용합니까?
Kevin

11

Eclipse에서 직접 JVM이 할당 한 힙 크기를 증가시킬 수 있습니다.

실행 ----> 실행 구성 ----> 인수

-Xmx1g를 입력하십시오 (Xmx256m 또는 Xmx1g와 같은 최대 크기를 설정하는 데 사용됩니다 ....... m-> mb g ---> gb)


3
이것을 추가하기 위해 VM 인수가되어야합니다 (일식은 두 가지 옵션을 제공합니다).
Matt Boyle

11

자바 -d64 -Xms512m -Xmx4g HelloWorld

-d64 : 64 비트 JVM 사용 -Xms512m : 초기 힙 크기를 512MB로 설정 -Xmx4g : 최대 힙 크기를 4GB로 설정합니다 (여기서 Java 파일 이름은 HelloWorld.java).


9

아래와 같이 JVM 매개 변수 -Xms-Xmx를 전달하여 힙 크기를 늘릴 수 있습니다 .

Jar 파일의 경우 :

java -jar -Xms4096M -Xmx6144M jarFilePath.jar

Java 파일의 경우 :

 java -Xms4096M -Xmx6144M ClassName

위의 매개 변수는 InitialHeapSize (-Xms) 를 4GB (4096MB)로, MaxHeapSize (-Xmx) 를 6GB ( 6144MB )로 늘립니다 .

그러나 젊은 세대 힙 크기는 동일하게 유지되며 추가 HeapSize는 이전 세대 힙 크기에 추가됩니다 . 하기 위해서는 젊은 세대 힙 올드 세대 힙의 크기를 동일하게 사용 NewRatio = 1 -XX : -UseAdaptiveSizePolicy -XX PARAMS합니다.

java -jar -Xms4096M -Xmx6144M -XX:NewRatio=1 -XX:-UseAdaptiveSizePolicy pathToJarFile.jar

-XX : NewRatio = Old Gen Heap Size : Young Gen HeapSize (원하는 비율을 얻기 위해이 비율로 재생할 수 있습니다).


7

힙 메모리를 실제 메모리 (6GB 힙)의 75 %로 늘릴 수 있습니까?

그래 넌 할수있어. 실제로 원하는 경우 실제 메모리 양보다 더 많이 늘릴 수 있습니다.

이를 수행하는 것이 좋은지 여부는 시스템에서 실행중인 다른 양에 따라 다릅니다. 특히, 현재 실행중인 응용 프로그램 및 서비스의 "작업 집합"이 사용 가능한 실제 메모리를 크게 초과하면 시스템이 "쓰레기"되어 가상 메모리 페이지를 디스크간에 이동하는 데 많은 시간이 소요됩니다. 결과적으로 시스템이 엄청나게 느려집니다.


귀하의 의견에 감사드립니다 그러나 어떻게 증가시킬 수 있습니다. PLZ 당신은 명령을 줄 수 있습니다.
Sunil

-Xmx6000m을 사용해보십시오. 64 비트 버전의 Java를 사용하는 경우 작동해야합니다.
Stephen C

3
64 비트 버전의 Java를 실행하고 있습니까? 64 비트 운영 체제에서?
Stephen C

4

아래 명령을 사용하여 힙 크기를 6GB로 변경하십시오.

export JAVA_OPTS="-Xms6144m -Xmx6144m -XX:NewSize=256m -XX:MaxNewSize=356m -XX:PermSize=256m -XX:MaxPermSize=356m"

시스템에 8G 메모리가 있고 작업 관리자에서 항상 그 중 70 %가 사용 중임을 알 수 있습니다. Java 힙 크기에 6G 메모리를 할당 할 수 있습니까?
Reihan_amn

1
@Reihan_amn 예, 아니오, 메모리를 초과하면 디스크에있는 페이징으로 이동하여 매우 느립니다. 페이지 파일을 초과하면 시간이 오래 걸리는 것입니다.
CodeMonkey

2

여러 사람들이 -Xms및 jvm 옵션을 사용하여 힙 크기에 대한 특정 답변을 지적했습니다 -Xms. 이것이 jvm에 대한 유일한 유형의 메모리 옵션은 아니라는 점을 지적하고 싶습니다. 특히 스택 오버 플로우를 얻는 경우와 같은 추가 옵션을 추가하여 스택의 크기를 늘리고 싶을 것 -Xss8m입니다.

이 문제의 경우 jvm 옵션과 같은 -Xms2g -Xmx6g -Xss8m솔루션이 있습니다.

Google에서 jvm 메모리를 늘리는 방법에 대한 검색 에서이 솔루션으로 이동 했으며이 솔루션이 많은 양의 메모리 할당으로 작동하지 않았 으므로이 정보를 공유하고 있습니다. 특정 설정이 무엇인지 파악한 후에는 Google에서 스택 크기를 늘리고 누락 된 매개 변수를 찾는 방법을 알 수있었습니다. :) 이것이 많은 시간을 절약 할 수 있기 때문에 다른 사람들의 시간을 절약하기를 바랍니다. :)


2

이것은 64 비트 버전의 Java에서만 작동합니다. 제어판으로 이동하여 Java 아이콘을 클릭하십시오. Java 제어판의 작은 창에서 Java 메뉴 표시 줄을 클릭 한 다음view 버튼 .

두 개의 Java 플랫폼이있는 경우 이전 버전의 Java를 사용하지 않도록 설정 한 후 런타임 매개 변수 텍스트 필드 를 클릭하고 -Xmx1024mRAM 크기 이하로 작성하십시오 . RAM과 같은 힙 크기를 늘리지 않으면 시스템이 중단됩니다.


힙 크기를 RAM과 동일하게 만들면 시스템이 중단되지 않습니다. 대신 시스템이 페이징을 시작하고 속도가 느려집니다.
DaveTheMinion

0

예. 당신은 할 수 있습니다.

힙 메모리를 실제 메모리의 75 % (6GB 힙) 이상으로 늘릴 수 있습니다.

64 비트를 사용하므로 힙 크기를 원하는 양으로 늘릴 수 있습니다. 32 비트를 사용하는 경우 4GB로 제한됩니다.

$ java -Xms512m -Xmx6144m JavaApplication

초기 힙 크기를 512mb로 설정하고 최대 힙 크기를 6GB로 설정합니다.

그것이 도움이되기를 바랍니다 .. :)


이것은 몇 년 전에 게시 된 두 개의 가장 인기있는 답변과 매우 유사합니다.
Bernhard Barker

0

Eclipse / STS를 사용하여 Java 코드에서 py 파일을 실행하는 데 문제가 있으며 jvm 힙 메모리가 부족하여 PyException이 발생합니다. 아래에 언급 된대로 변경을 수행했으며이 문제를 해결할 수 있습니다. 아래는 내 시스템 구성입니다.

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

그리고 이것은 내 작업 공간과 변경 사항에서 내가 한 변경 사항입니다. 지금 완벽하게 실행됩니다.

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

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