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