Используя команду jmap -histo
в работающем процессе, каждые 30 минут или около того, я обнаружил один тип объекта, который явно является утечкой памяти (в настольном приложении).
Объект, ответственный за утечку ( Т.е.. единственный вид объекта, число экземпляров которого увеличивается со временем и на огромную сумму): int [] .
Я подозреваю, что BufferedImage
является виновником, но я не уверен в этом (я очень заботился о том, чтобы смыть / обнулить BufferedImage
s, но я все еще думаю, что именно в этом причина утечки).
Однако я также использую int [] в другой части программы, и я просто не уверен, откуда происходит утечка. Вывод jmap -histo
немного "тонкий", на мой взгляд.
Как теперь определить, где происходят утечки int[]
.
Кстати, я хотел бы указать, насколько велик может быть простой jmap -histo
: я уверен, что для многих объектов достаточно просто увидеть количество экземпляров и использованную память, чтобы обнаружить утечку, без требующий дальнейшего анализа.
Однако в моем случае мне нужно что-то еще.
Мой вопрос не в том, какие инструменты позволяют обнаружить утечку. Мой вопрос:
Зная, что мое приложение (или API, который использует мое приложение) протекает int [] , какие шаги я могу предпринять (например, с помощью вашего любимого профилировщика), чтобы, надеюсь, найти утечки
Инструмент должен работать на Java 1.5 OS X 10.4 Apple JVM.