2016-12-02 2 views
1

16GB RAM이있는 Windows 7 랩톱이 있습니다. 그러나 여러 Java 서버를 실행할 때 OutOfMemory 오류가 발생하지만 Windows 작업 관리자는 6GB의 여유 실제 메모리가 남아 있음을 보여줍니다. 내 JVM은 실행중인 모든 Java 응용 프로그램에 대해 ~ 2GB 힙만 할당 할 수 있습니다. 64 비트 JVM 개체 힙에 충분한 공간을 예약 할 수 없습니다.

은 그래서 아주 간단한 자바 코드를 작성 :

public class HelloWorld { 
    public static void main(String[] args) { 
     for(;;) System.out.println("Hello, World"); 
    } 
} 

내 -jvm 버전 :

$ java -version 
java version "1.8.0_111" 
Java(TM) SE Runtime Environment (build 1.8.0_111-b14) 
Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode) 

JAVA_HOME "C : \ 프로그램 파일 \ 자바 \ jdk1.8.0_111는"

JRE_HOME "C : \ Program Files \ Java \ jre1.8.0_111"

나는 간단했습니다 java -Xmx256m -Xms256m HelloWorld 그리고 그게 wor

Error occurred during initialization of VM 
Could not reserve enough space for object heap 

여러 개의의 JDK를 시도했지만 그들 중 누구도 작동하지 않습니다 예상대로 나는 다음과 같은 얻을 java -Xmx2048m -Xms2048m HelloWorld로 전환하지만 때, KED. 윈도우와 JVM은 모두 64 비트입니다.

이 문제를 해결하려면 어떻게해야합니까?

+0

[VM 초기화 중 오류가 발생했습니다. 개체 힙에 "-Xmx3G"를 사용하여 충분한 공간을 확보 할 수 없습니다 (http://stackoverflow.com/questions/9303889/error-occurred-during-initialization-of-vm-could-not-reserve-enough-space-for). . 특별히,이 답변보기 http://stackoverflow.com/a/9304270/529630 – Dunes

+0

스왑을 사용하도록 설정 했습니까? windows의 메모리 사용 통계는 Linux에 비해 다릅니다. – the8472

답변

1

내 JVM은 실행중인 모든 Java 응용 프로그램에 대해 ~ 2GB 힙만 할당 할 수 있습니다.

정확하지 않습니다. JVM은> 2GB 힙을 요구하고 사용할 수 있습니다.

Windows에서 Java 프로세스에서 요청할 수있는 내용을 제한해야합니다. 또한 Windows에서 여러 Java 프로세스에 대한 메모리를 예약했지만 JVM에서이를 사용하지 않아 메모리가 무료로 표시 될 수 있습니다.

FWIW, 실제로 필요한 것보다 많은 메모리가있는 JVM을 실행하는 것은 좋은 생각이 아닙니다.

수정 사항?

  1. 하지 마십시오. 랩톱에서 2GB Java 서버를 많이 사용하지 않거나 힙 크기를 좀 더 합리적으로 줄이지 마십시오. JVM이 할당 한 모든 메모리를 사용하기 전까지는 메모리를 과도하게 커밋하는 것이 좋습니다. 그렇다면 시스템은 ...

  2. 다르게 수행합니다. 단일 JVM에서 여러 서버를 실행할 수 있습니다.

  3. 더 많은 메모리를 확보하십시오.

0

그냥 -Xms2048m을 사용하지 마십시오. JVM은 연속 2Gb 메모리 블록을 한 번에 요청합니다. JVM에서 힙 필요에 대한 추가 mem을 언제 얻을지 결정하십시오. Windows의 경우에는 가상 메모리가 조각난 가상 메모리 (바이러스 백신, 방화벽, 루트킷, 바이러스 등)에 매핑 된 잘못 정렬 된 dll의 결과 일 수 있습니다. ide에서 java를 실행하면 에이전트를 사용하여 (native impl로) 숨겨진 컨텐츠를 추가하여 가상 메모리를 처리 할 수 ​​있습니다.프로세스의 가상 메모리를 관찰하는 좋은 도구는 vmmap입니다. Microsoft Sysinternals suite