Я знаю, что это не то, что вы спросили, но вы пытались просмотреть дамп кучи, чтобы увидеть, где у вас может быть утечка памяти?
Некоторые очень полезные инструменты для отслеживания утечек памяти:
jdk/bin/jmap -histo:live pid
Это даст вам гистограмму всех живых объектов, находящихся в данный момент в JVM. Ищите любые странные объекты. Вам нужно будет знать свое приложение достаточно хорошо, чтобы определить количество нечетных объектов.
jdk/bin/jmap -dump:live,file=heap.hprof pid
Это сбросит всю кучу JVM, идентифицированную pid. Затем вы можете использовать отличный Eclipse Memory Analyzer , чтобы осмотреть его и выяснить, кто держит ссылки на ваши объекты. Двое ваших самых больших друзей в Eclipse Memory Analyzer - гистограмма и right click -> references -> exclude weak/soft references
, чтобы увидеть, что ссылается на ваш объект.
jconsole, конечно, еще один хороший инструмент.