программное отслеживание памяти в Java - PullRequest
1 голос
/ 16 июля 2010

Я работаю над большой уже существующей системой и не могу использовать какие-либо инструменты внешнего профилировщика, которые были упомянуты в других вопросах.

При этом, есть ли какой-то программный способ для меня, чтобы ява распечатать, какие переменные все еще распределены и используют пространство кучи?Имя и тип переменной были бы идеальными, но любая идентифицирующая переменная информация была бы полезна.

Ответы [ 3 ]

0 голосов
/ 16 июля 2010

Вы пробовали VisualVM? Это довольно ненавязчиво, и должно быть в состоянии дать вам хорошее представление об использовании памяти.

В худшем случае, вы всегда можете убить проект и нанести удар по дампу ядра (если вы работаете в ОС, которая поддерживает дампы ядра).

0 голосов
/ 17 июля 2010

Будьте осторожны с размещением любого кода внутри finalize , так как любое помещение кода в finalize может увеличить время жизни вашего объекта; фактически, в крайних случаях это может привести к тому, что объект никогда не получит GCed.

0 голосов
/ 16 июля 2010
  1. Для каждого класса добавьте статический член типа int (изначально ноль), чтобы он увеличивался в конструкторе и уменьшался в деструкторе. Это дает вам количество объектов каждого класса. (Вам может понадобиться синхронизировать счетчик вкл / декабрь, если система многопоточная)
  2. Распечатывать количество объектов всех классов и Runtime.getRuntime().totalMemory() периодически.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...