프로그램을 실행하다보면 어떤 함수에서 JVM에서 OutOfMemory 예외가 발생하는 경우가 종종 있다.

예상보다 메모리를 과하게 잡아먹는다면 실제 필요한 메모리가 얼마인지 알아내야 한다.


힙 최대 메모리 사이즈를 늘려 준 후.

-Xmx2048m 으로 주면 충분할 듯..

private static final Runtime runtime = Runtime.getRuntime();

{
	...
	
	double start, end;                // 실행 전후 메모리 기록 변수
	start = measureHeap();     // 실행 전 메모리 기록
	CC res = run();                           // 메모리 예외발생하는 문제의 함수 콜
	end = measureHeap();      // 실행 후 메모리 기록
	System.out.format(" %10.6f", end - start);    // 콘솔 출력
	System.out.flush();
	...
}

private static double measureHeap() {
	for (int i = 0; i < 4; i++)
		_runGC();
	return ((double) (usedMemory())) / 1048576.0d;
}
private static void _runGC() {
	long usedMem1 = usedMemory(), usedMem2 = Long.MAX_VALUE;
	for (int i = 0; (usedMem1 < usedMem2) && (i < 500); i++) {
		runtime.runFinalization();
		runtime.gc();
		Thread.yield();
		usedMem2 = usedMem1;
		usedMem1 = usedMemory();
	}
}
private static long usedMemory() {
	return runtime.totalMemory() - runtime.freeMemory();
}


수행을 하면, 임시적으로 사용한 메모리를 제외한(GC) 크기가 출력된다.


'NATIVE > eclipse' 카테고리의 다른 글

External Tools로 빌드  (0) 2012.07.11
java.lang.StackOverflowError  (0) 2012.07.10
java.lang.OutOfMemoryError  (0) 2012.07.10




외부 빌더를 통해 빌드하는경우 내장 빌더의 자동빌드 체크는 꺼주자.

이것때문에 에러난다고 런이 안되는 경우가 발생한다-_-



예로,

이클립스에서 ant builder를 사용하여 스칼라 코드를 빌드하는 경우에는

내장 스칼라 빌더는 참견하지 않게 하는것이 심상에 좋을 것이다.







'NATIVE > eclipse' 카테고리의 다른 글

자바 프로그램 힙 메모리 사용 측정  (0) 2012.07.11
java.lang.StackOverflowError  (0) 2012.07.10
java.lang.OutOfMemoryError  (0) 2012.07.10


eclipse 에서 스택 사이즈도 조정할 수 있다.


VM argument로 

-Xss100m 옵션을 주면 스택을 늘릴 수 있다.

기본 사이즈는 512k 이다.

'NATIVE > eclipse' 카테고리의 다른 글

자바 프로그램 힙 메모리 사용 측정  (0) 2012.07.11
External Tools로 빌드  (0) 2012.07.11
java.lang.OutOfMemoryError  (0) 2012.07.10



이클립스상에서 Run을 하다보면

java.lang.OutOfMemoryError: Java heap space 예외가 발생하는 경우가 있다.

런타임시 힙 메모리가 부족한 경우이다.


방법은 두가지 이다.





eclipse.ini 파일 맨 밑 라인에

-vmars

-Dosgi.requiredJavaVersion=1.5

-Xms1024m

-Xmx1024m

을 추가한다.


Xms는 메모리의 시작크기를 나타내고

Xmx는 메모리의 최대크기를 나타낸다.

따라서 당연히 Xms <= Xmx 여야 하겠다.


XP에서 JVM 자체 최대 메모리 크기는 1g 정도 이다. (http://stackoverflow.com/questions/171205/java-maximum-memory-on-windows-xp)



Run Configurations의 Arguments 탭 내의 

VM arguments 박스에

-XX:MaxPermSize=128m -Xms1024m -Xmx1024m 

를 추가해 준다.


JVM에서는 메모리를 두가지 종류로 나눠서 관리하는데

  • Heap : 일반적인 실행 영역
  • PermGen : 클래스 메타 데이터 영역

으로 정의된다.






그리고 Windows -> Preferences -> General 에서 Show heap status를 체크해 주면 이클립스 하단에서 메모리 상태를 확인 할 수 있다. 잘 확인하고 적당한 사이즈로 늘려주자.-_-!!




'NATIVE > eclipse' 카테고리의 다른 글

자바 프로그램 힙 메모리 사용 측정  (0) 2012.07.11
External Tools로 빌드  (0) 2012.07.11
java.lang.StackOverflowError  (0) 2012.07.10

+ Recent posts