프로그램을 실행하다보면 어떤 함수에서 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

+ Recent posts