Please Enable JavaScript!
Gon[ Enable JavaScript ]

java.lang.OutOfMemoryError: PermGen space 문제점과 해결

프로그래밍 툴/이클립스(Eclipse)
반응형
!MESSAGE Failed to execute runnable (java.lang.OutOfMemoryError: PermGen space) !STACK 0
org.eclipse.swt.SWTException:Failed to execute runnable (java.lang.OutOfMemoryError: PermGen space)
 at org.eclipse.swt.SWT.error(SWT.java:3563)
 at org.eclipse.swt.SWT.error(SWT.java:3481)


이클립스사용도중 갑자기 다운될때 eclipse/.metadata/.log 를 확인하면 위와 같은 메시지를 확인할수있다.
OutOfMemoryError 라고 하니 메모리가 부족해서인거같은데 PermGen space 는 뭘 의미하는걸까?
아마 메모리가 부족한 영역이라고 짐작할수 있다.
그리고 밑에보면 SWTException 이라고 나오는데 리치클라이언트 프로그램작업이 리소스를 많이 차지하는것같다.

위에서 질문했듯이 PermGen space 는 JVM 에서 관리하는 2가지의 메모리 영역중 한곳인데
그 두가지가 무엇이냐하면 Java Heap space, Permenant Generation 이다.
Heap 은 프로그램이 돌아가는 도중에 생성삭제되는, 그러니까 garbage-collected 가 일어나는곳이며
Permenant 는 프로그램이 끝날때까지 영원히 메모리를 차지하고 있는 공간이다. garbage-collected 가 일어나지 않는곳이다. 그럼 두가지 영역에 어떤 애들이 들어가는지는 쉽게 유추해볼수 있을것이다.
Heap 에는 동적으로 생기는 메모리 들이 들어가는 곳이고, Permenant 는 Class names, internalized strings,
objects 등이 들어가는데 이름에서도 알수 있듯이 PermGen 이 이곳에 해당한다.

그럼 문제해결은 이 Permenant  라는 공간을 이클립스 실행시에 영구히 늘여주면 될것이다. 기본은 20M 정도 밖에 되지 않는다. 기존에 쓰는 이클립스 파라미터는
javaw -vmargs -Xverify:none -XX:+UseParallelGC -XX:PermSize=20M -XX:MaxNewSize=32M -XX:NewSize=32M -Xmx512M

추가로 PermGen 영역을 추가하여 수정한 파라미터이다
javaw -vmargs -Xverify:none -XX:+UseParallelGC -XX:PermSize=64M -XX:MaxPermSize=128M -XX:MaxNewSize=32M -XX:NewSize=32M -Xmx512M

위와같이 파라미터값을 조절하고 한가지더 챙겨야 할것이 하나의 Workspace 에서 포함되어있는 프로젝트 수는 필요한것만 골라서 최소로 하는것이좋다. Workspace 에 포함되어있는 모든 클래스정보들이 메모리에 올라가기 때문이다.



반응형
Posted by 녹두장군1
,