근래에 들어와서 위의 메세지를 띄우면서 이클립스가 죽는 경우가 많이 생겼다. 'out of memory'라는 단어만으로 단순히 메모리가 부족해서라고 생각했고, 웹검색을 통해서 이클립스를 실행할 때 JVM의 힙 메모리의 용량을 지정할 수 있는 방법을 찾아냈다.
메모리를 넉넉하게 지정하고 사용하면서 한동안 보이지 않았던 위의 에러 메세지가 얼마 전 부터 다시 보이기 시작했다. 또 다시 웹 검색을 시작했다. 덕분에 오늘 많은 것들을 배울 수 있었다.
자바의 Heap공간은 내가 알던 것 보다 더 많은 부분으로 나누어져 있다는 것을 알게 되었고 더불어 GC(Garbage Collection)에 대한 부분도 몇 가지 GC알고리즘이 있고 그 중 어플리케이션의 사용 환경에 따라 선택하여 사용할 수 있게 하는 JVM옵션이 있다는 것도 알았다.
New/Young(신세대 힙)
- 객체가 생성되자마자 저장되고, 생긴지 얼마 안된 객체가 저장되는곳. 이 곳에 있는 객체들은 시간이 지남에 따라 우선순위가 낮아지면서 Old영역으로 옮겨진다.
Old 영역(구세대 힙)
- New/Young 영역에 저장되었던 객체중에 오래된 객체가 이동되어 저장되는 영역
Perm 영역(영구세대 힙)
- Class, Method 등의 Code 등이 저장되는 영역. JVM에 의해서 사용된다.
JVM의 Heap공간은 위의 3가지가 있는데, 내 문제는 그 중에서도 Perm영역의 메모리 공간이 부족했던 것 같다. 이클립스의 WTP를 쓰다보면 클래스의 양이 늘어남에 따라 Permanent generation의 공간이 부족하게 되고, 부족하게 되면 종종 이클립스가 'OutOfMemoryError: PermGen space'에러를 내 뿜으며 쓰러지곤 한다고 한다는 글들을 발견했다.
eclipse.ini 수정
-vmargs
-Xverify:none
-XX:PermSize=64M
-XX:MaxPermSize=256M
-Xms256m
-Xmx512m
해결 방법으로 이클립스에 위의 내용처럼 옵션을 줘서 사용하기로 했다.
이클립스 뿐만 아니라 JVM을 사용하는 어플리케이션에서 메모리로 인한 에러가 발생한다면 메모리 관련 JVM옵션을 사용 해 주면 해결되니 좀 더 관련 자료를 봐 두기로 했다.
[출처] : 재미있는 세상, 즐거운 세상
'프로그램 > 이클립스' 카테고리의 다른 글
Eclipse + Spring IDE plugin 설치 (0) | 2012.05.21 |
---|---|
Eclipse Color Themes (0) | 2012.01.24 |
코드블럭에 필요한 코드 집어 넣기(try~catch, for, do, while 등등...) (0) | 2008.08.25 |
이클립스 자동 컴파일 해제방법 (0) | 2008.08.18 |
이클립스 에디터창에 줄번호 표시하기 (0) | 2008.08.18 |