2009-08-06 4 views
4

메모리 누수가있는 Java 응용 프로그램이 있습니다. 어떤 개체가 가비지 수집 중에 해제되지는지는 모르지만 그 개체를 참조하는 것은 해결할 수 없습니다.가비지 수집을 위해 객체 그래프를 '볼 수 있습니까'?

JVM에서 내부적으로 보유하고있는 객체 그래프의 일종의 가시성을 가질 수 있습니까?

어떤 개체가 다른 개체를 참조하고 있는지 확인할 수 있습니다.

+0

왜 어떤 물건을 knoe 할 때 그들을 참조 할 수 없습니까? –

+0

J2ME 앱입니다. 에뮬레이터의 메모리 프로파일 러는 클래스가 1 일 때만 2 개의 인스턴스가 있다고 알려줍니다. 불행히도 더 이상 알려주지 않습니다. – izb

답변

4

정말 기본적인 수준에서 jhat 및 jmap 명령을 사용하여 실행중인 Java 프로세스에서 힙 파일을 읽고 처리 한 다음 로컬 포트에서 작은 웹 서버를 시작합니다. 읽기 쉽지는 않지만 프로파일 러를 사 용할 필요는 없습니다.

+0

와우. 정말 끝내주는 군. – izb

1

프로파일 러가이를 수행합니다. 예 : JProfiler. 오늘 날 나는 Optimizeit (지금 죽은 것 같습니다)를 사용했습니다.

결론은 청취자가 일부 콜렉션에 전달되고 콜렉션에서 제거되지 않는다는 것입니다. 리스너는 Frame 또는 프레임을 참조하는 해당 컨트롤 클래스에 정의 된 익명의 내부 클래스이며 익명의 내부 클래스는 외부 클래스에 대한 암시 적 참조를가집니다. 그래서 작은 청취자는 액자 전체 프레임과 그에 수반되는 모든 객체를 활성 메모리에 보관했습니다.

관련 문제