Я хочу дать совет о том, как контролировать приложение на предмет утечек памяти с помощью инструментов, доступных в JVM. Он не показывает, как генерировать утечку памяти, но объясняет, как ее обнаружить с минимальными доступными инструментами.
Сначала необходимо отслеживать потребление памяти Java.
Самый простой способ сделать это - использовать утилиту jstat, поставляемую с JVM.
jstat -gcutil <process_id> <timeout>
Он сообщит о потреблении памяти для каждого поколения (Young, Eldery и Old) и времени сбора мусора (Young и Full).
Как только вы обнаружите, что Полная сборка мусора выполняется слишком часто и занимает слишком много времени, вы можете предположить, что у приложения происходит утечка памяти.
Затем вам нужно создать дамп памяти с помощью утилиты jmap:
jmap -dump:live,format=b,file=heap.bin <process_id>
Затем вам нужно проанализировать файл heap.bin с помощью Memory Analyzer, например Eclipse Memory Analyzer (MAT).
MAT проанализирует память и предоставит вам подозрительную информацию об утечках памяти.