2011-09-21 9 views
5

Java에서 가비지 수집 된 객체 (해당 변수 또는 클래스 이름 이상)의 기록을 가져 오는 방법은 무엇입니까?Java에서 가비지 수집 된 객체를 확인하는 방법은 무엇입니까?

그냥 (오라클 JVM에)이 PARAMS

-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps 

바이트에 어떤 다른 메모리를 제공하지 않습니다를 추가. 그것은 매우 제한된 도움입니다. 모든 답변을 주셔서 감사합니다.

참고 : finilize() 메서드 추가로 해결할 수있는 옵션은 불행히도 나를위한 옵션은 아닙니다 (액세스 권한이 없습니다).

답변

3

면책 조항 : 저희 회사는이 답변에서 내가 권장하는 도구를 개발합니다.

JProfiler에서 메모리 섹션의 "기록 된 객체"보기로 이동하여 활성 모드를 가비지 수집 객체 (보기 -> 활성 모드 변경 -> 가비지 수집 객체)로 전환 할 수 있습니다. 그런 다음 GCed 된 개체의 통계를 볼 수 있습니다.

enter image description here

+1

감사합니다. JProfiler는 멋져 보이지만 450 €는 너무 비싸다. –

+0

프로그래밍 방식으로 클래스를 나열 할 수있는 방법이 있습니까? 나는 java.lang.Management 패키지를 살펴 보았지만 카운트 만 리턴 할 수있다. – meexplorer

+0

JProfiler 또는 JDK MBean을 의미합니까? –

3

finalize 방법을 Object에서 사용할 수 있습니다. 이 메소드는 객체를 GC하려고 할 때 호출됩니다. 여기에서 필요한 정보를 기록 할 수 있습니다.

0

메모리 누수가 있습니까?

finalize() 메서드 (모든 Object에서 사용 가능)를 구현하면 객체가 가비지 수집되기 바로 전에 호출되며, 내부에서 임의의 코드를 실행할 수 있습니다.

체계적인 솔루션을 찾고 있거나 (모니터링하려는 클래스에 대한 액세스 권한이없는 경우)이를 허용하는 JVM 옵션을 알지 못합니다. 그러나 로그 클래스가로드 및 언로드 (GCed) 될 수 있지만 이것은 사용자가 요구하지 않습니다.

-2

런타임에 JVM을 관찰 JDK에 좋은 내장 도구가있다. 그것은 jvisualvm입니다. 여기 http://visualvm.java.net/description.html

그들 중 하나입니다 : 도움이 enter image description here

희망은 스크린 샷에 좋은 참고가있다.

+1

jprofiler는 매우 강력하고 공통적으로 사용되는 도구이지만 오픈 소스에 한해 무료이며 단일 인스턴스에 대한 표준 라이센스는 실제 돈 - $ 500입니다. 일부 프로젝트에서는 문제가 될 수 있습니다. – BrownFurSeal

+1

VisualVM을 알고 있지만 사용하지만 가비지 수집 된 개체를 볼 수는 없습니다. –

+0

그것은 유용한 도구이지만,이 특별한 필요에 응답하지 않습니다. –