2011-02-08 5 views
4

Я ищу инструмент, который позволяет мне видеть, как объекты создаются в куче во время выполнения. Я использовал VisualVM - Profiles, но не смог найти, когда создается переменная определенного типа (тот, который я ищу). Может быть, я что-то не так ... Я также буду благодарен за любую подсказку, как получить такую ​​информацию с помощью любого API.См. Содержимое кучи java во время выполнения

С уважением, Marcin

ответ

4

Обычно профайлеры (такие как JProfiler) позволит вам увидеть это - смотрите, например, Allocation recording explained скринкаст.

Однако они достигают этого путем присоединения агента к JVM, который позволяет им перехватывать операции низкого уровня - эта информация обычно не доступна ни для пользователей, ни для программ Java. Таким образом, вы не сможете увидеть кучу через JMX-приложения, такие как JConsole или JVisualVM.

+0

Спасибо за подсказку, я попробую его, дайте знать. –

+0

VisualVM имеет приятную функцию, которая является heapdump, которая отражает содержимое кучи и может быть очень полезной. BTW - как подключить любое запущенное приложение от JProfiler? –

2

Внутри VisualVM Profiler выберите Настройки и укажите класс, который вы хотите профилировать. Может быть, вам также нужно посмотреть на вариант, который записывает стеки распределения.

+0

heapdump помог мне посмотреть текущее содержание кучи, спасибо –

1

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

+0

Я работаю с некоторыми фреймворками, и за сценой много чего. Вот почему мне нужно что-то большее, чем отладчик. Проблема в том, что у меня есть поле экземпляра, которое дважды создается с помощью «нового» оператора и из-за рамки работы старой ссылки, похоже, не удаляется. Мне нужно увидеть кучу программ, чтобы убедиться, что происходит. –

+0

@sznury, вы не дали мне понять, почему вам нужно больше, чем отладчик. Если ваше приложение/фреймворк не ведет себя так, как должно, у вас есть ошибка. Можете ли вы уточнить, что вы имеете в виду, потому что поле экземпляра может быть создано только один раз (когда объект создан), и вы не можете иметь ссылку на поле. Я предполагаю, что вы меняете значение поля, но вы все равно видите старое значение в структуре. –

+0

слишком сложно объяснить вам в нескольких словах, что происходит. Поле экземпляра A может быть создано при создании объекта, а позже, если оно не имеет модификатора _final_, значение A может быть изменено с помощью оператора _new_, и это точка. –

Смежные вопросы