2013-04-28 1 views
1

나는 우분투 예외 전에 명령 free -m 몇 분의 출력은 12.04 이 예외유닉스 스왑 및 자바 힙 공간 예외의 회피

java.lang.OutOfMemoryError: Java heap space 

내가 사용을 얻을 :

[email protected]:~$ free -m 
     total  used  free  shared buffers  cached 
Mem:   3939  2672  1266   0   80  610 
-/+ buffers/cache:  1981  1957 
Swap:   7328   65  7263 

나는이 예외를 피하기 위해 그것을 사용하는 것이 가능하다 스왑 충분히 을 사용하지 않는 점에 유의

+1

-Xm 스위치를 사용하면 Java 힙 공간을 늘릴 수 있습니다. – Satya

답변

3

Java 가상 머신은 몇 가지 한계를 부과합니다. java 명령을 실행할 때 스택 및 힙 한계를 늘릴 수 있습니다.

은 분명히 당신이 6g은 6 지브

힙을 제한해야

java -Xmx6g myprogram 

같은 것을 통과해야

Increase heap size in Java

1

에서 OutOfMemory 오류는 여러 이유로 인해 (예 : 힙 고갈에 발생할 수 있습니다 프로그램에서 메모리가 누출되면 프로그램이 더 많은 메모리를 필요로하고 원시 메모리가 고갈됩니다. OutOfMemory의 이유를 알아내는 가장 좋은 방법은 OutOfMemory가 될 때 JVM이 힙 덤프를 생성하도록하는 것입니다.이를 달성하려면 -XX : + HeapDumpOnOutOfMemoryError 옵션을 사용할 수 있습니다.

일단 힙 덤프가 생성되면 eclipse 메모리 분석기를 사용하여 힙을 분석 할 수 있습니다.

http://www.eclipse.org/mat/

메모리 누수가 있거나 프로그램이 정말 추가 메모리를 필요 여부를 확인과 분석. 추가 메모리가 필요한 경우 -Xmx 옵션을 사용하여 동일하게 구성 할 수 있습니다.

0

기본 제한은 주 메모리의 1/4입니다. 최대치를 높이면 더 많이 사용할 수 있습니다.

당신은주의해야한다 : JVM이 응용 프로그램에 대한 스왑 공간을 사용

  • 은 GC가 처리하지 않을 경우 컴퓨터를 죽일 것 같은 아주 나쁜 생각이다.
  • 더 많은 메모리를 고려해 볼 가치가 있습니다. $ 300에 64GB를 살 수 있습니다.

BTW 자신이 지은 8 살짜리 아들을 위해 PC를 구입했습니다. ;) 비용은 240 파운드이고 메모리는 8GB입니다.

+0

왜 스왑이 좋지 않을까요? – LtWorf

+0

@LtWorf GC가 최소한 두 번 액세스하려고합니다. 일단 힙을 교체하기 시작하면 GC는 가장 오래된 페이지를 강제로 스왑 아웃하여 액세스해야하는 부분을 가져와 모든 힙을 디스크의 일부분으로 몇 번 섞습니다. 리눅스에서는 운이 좋다면 프로세스를 죽일 수 있고, Windows에서는 제어권을 다시 얻으려면 상자의 전원을 껐다 켜야 할 때가 많습니다. –

+0

그래서이 모든 것은 GC가 제대로 구현되지 않았기 때문에 발생합니다. – LtWorf