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


sun-java6-jdk 를 설치하려면 apt-get으로는 불가능하다.

apt-get java명령은 openJDK 를 설치한다.


http://tenisland.tistory.com/176


위 블로그를 통해 sun-java를 설치할 수 있다.






삽질했던게...

apt-get으로 ant를 설치하고 나서 sun-java를 설치했다.


그런데 정상빌드가 되야하는 소스가 빌드오류가 나는것이 아닌가. 컴파일러 문제라며 뻗었다.

혹시나 sun-java를 지워도 java는 /usr/bin에 계속 살아있고...-_- 좀비같이....


알고보니 ant에 java가 디펜던시가 있어 openJDK가 같이 설치된 줄 모르고

엄한 sun-java만 탓했었다...... 미안 ㅋㅋㅋ


앞으로는 디펜던시 잘 보고 설치하자.






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

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



예로,

이클립스에서 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


정규표현식에 익숙하지 않아서 한참 애를 먹었다.

"use strict"

'use strict'

이거 매치하는데 이리 오래걸릴줄이야-_- 분발하자.



스트릭트 모드 검사하는 모듈 구현 시 StringLiteral(str)로 파싱되는 str을 검사한다.

val pattern = "^\\s*use strict\\s*$"
val str = "use strict"
(pattern findFirstIn str) match {
	case Some(res) => System.out.println(res)
	case None => ;
}


^ : 시작 문자를 지정한다. 여기서는 \s(공백)으로 지정하였다.

\s : 공백 문자를 나타낸다.

$ : 종료 문자를 지정한다. 여기서는 마찬가지고 \s(공백)으로 지정하였다.


입력값이 "use strict", " use strict", " use strict ", 'use strict ' 등.. 앞뒤 공백이 있는 use strict 문자열이라면 결과가 None 이 아닌 Some(res)이 리턴된다.

res에는 매칭된 문자열이 들어있겠지?




집에가서 조금 더 공부해야겠다.

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

스칼라 lift-json 사용  (0) 2012.10.04
스칼라 JSON 라이브러리  (0) 2012.08.14
 회사 리눅스 pc가 보안으로 네트웍이 막혀있어 proxy 서버를 사용하여 네트웍을 연결하였다.
git을 사용하기 위해서는 corkscrew를 설치하여야 한다.

  1. corkscrew 를 설치
    • ~$ sudo apt-get install corkscrew

  2. config 파일 설정
    • ~$ vi ~/.ssh/config
    • ProxyCommand /usr/bin/corkscrew [proxy 서버 주소] [proxy 서버 포트] %h %p



+ Recent posts