2010-04-07 5 views
0

필터 (javax.servlet.Filter)를 구현했습니다. 이제 JMX를 사용할 때 이상한 동작이 발생합니다. 가능한 한 빨리 "java.lang.OutOfMemoryError : PermGen space"오류가 발생합니다.JMX를 사용하면 java.lang.OutOfMemoryError가 발생합니다. PermGen 공간

나는 이것이 왜 있는지 이해할 수 없습니다. JMX를 사용하지 않으면 응용 프로그램이 잘 돌아가고있는 것처럼 보입니다.

답변

3

당신은

-XX:MaxPermSize=100m 

(이 예를 들어 100 메가 바이트 사용)과 같은 명령 줄 옵션을 사용하여 응용 프로그램을 시작해야합니다.

PermGen 공간은 문자열 상수, 클래스 파일 등이 상주하는 메모리의 일부입니다. 즉, 한 번 생성 된 모든 것이 가비지 수집 될 수 없습니다. 모든 JVM이이 개념을 사용하는 것은 아니지만 Sun JVM이 사용합니다.

+0

AFAIK, permgen *은 최근 JVM에서 가비지 수집되었지만 전체 가비지 수집에만 사용됩니다. 그리고 거기에 배치 된 물체의 특성 때문에 많은 공간을 회수 할 수있는 기회는 없습니다. –

+0

@Stephen : 물론 이죠, 고마워요. PermGen 공간의 정확한 처리는 구현에 달려 있습니다. 내 설명은 실제로 매우 스케치입니다. 필자는 기본적으로 클래스 당 한 번만 생성되고 인스턴스를 제거하면 PermGen 공간을 가비지 수집 할 수 없게됩니다. 귀하의 의견을 주셔서 감사합니다, 그것을 더 정확하게하는 것이 좋습니다 (비록 JVM 구현자가 여전히 그것을 묘사하려는 나의 시도를 웃을 것입니다 :-) –

+0

고마워요! :) – l3dx

관련 문제