2011-01-07 5 views
0

실행중인 프로세스에서 jmap -histo 명령을 사용하면 매 30 분마다 데스크탑 앱에서 분명히 메모리 누수가있는 한 종류의 개체가 발견되었습니다. 누설 ( 그 번호 인스턴스 시간 동안 성장과 엄청난 양만큼 개체의 종류 만)에 대한 책임어떤 종류의 객체가 메모리 누수를 일으키는 지 알았습니다. 지금은 무엇입니까?

개체 INT []이다.

나는 의심이된다. 그러나 나는 그것에 대해 확신하지 못한다. (나는 플러시/무효화에 대해 매우 신경을 썼다. 그러나 나는 여전히 그것이 누출이 멈추는 곳이라고 생각한다.)

그러나 나는 또한 프로그램의 다른 부분에서 int []를 사용하고 있으며 누출이 어디에서 왔는지에 대해 확신하지 못합니다. jmap -histo의 출력은 내 마음에 든다면 너무 "얇은"것입니다.

int[]의 누출 위치를 어떻게 알 수 있습니까?

간단히 말해서 내가 얼마나 위대하고 간단한 지 알려주고 싶습니다. : 많은 수의 객체가 단순히 인스턴스와 메모리의 수를 보는 것만으로도 누수를 발견 할 수 있습니다. 추가 분석.

그러나 제 경우에는 다른 것을 필요로합니다.

제 질문은 어떤 종류의 도구가 누수를 발견하는 것이 허용되지 않습니다. 내 질문 :

int [] 내 앱 (또는 내 앱에서 사용하는 API)이 누출되었다는 것을 알고 있다면 (좋아하는 프로필러를 사용하여) 취할 수있는 조치는 무엇입니까? 누출?

이 도구는 Java 1.5 OS X 10.4 Apple JVM에서 작동해야합니다.

답변

1

보유 된 힙으로 개체를 정렬해야합니다. 모든 int []를 포함하는 의미있는 객체/클래스를 매우 빠르게 찾을 수 있습니다.

+0

공구를 * Remaining Heap *별로 정렬 할 수 있습니까? – NoozNooz42

+0

당신은 그 일식 매트를 사용할 수 있습니다 :) –

1

개인적으로 jProfiler의 기능을 알지 못하기 때문에 이클립스 MAT를 처음 사용하는 것이 좋습니다. 그런 다음 힙 덤프를로드하면 int []의 수신 참조를 확인할 수 있습니다. 배열을 생성 한 핀 포인트를 얇게 할 수 있고 어느 보유 클래스가 엄청난 양을 실제로 생성하는지 볼 수 있습니다.

관련 문제