2015-02-22 2 views
0

Можно ли видеть объекты Java (и их тип класса), которые были сделаны недействительными и которые являютсяКак получить статистику собранных мусора объектов?

  1. Нет мусора/очищено
  2. мусора/очищено.

Эта статистика поможет узнать, сколько объектов неоднократно создавалось (по неправильной логике) вместо создания одного времени.

+0

Как вы можете идентифицировать «нежелательные» объекты в целом? –

+1

Вам не нужна ссылка на объект для его отображения? В этом случае он не получит GC'ed. Есть ли конкретная причина, по которой вы хотите это сделать? –

+0

Спасибо Энди Тернер. если у меня есть jbutton на jframe, и если я удалю из нее jbutton. В этом случае я хочу посмотреть, как память jbutton получила освобождение jvm, используя процесс сбора мусора. – Jeet

ответ

1

, чтобы отобразить нежелательные или нулевые объекты Java, которые не очищаются с помощью процесса мусора Java

Это не корректно определено понятие; по крайней мере, нет никаких полезных определений, которые бы дали вам что-то актуальное.

Часть памяти, в которой был выделен объект, может считаться свободной для всех практических целей, как только этот объект становится недоступным. Объем памяти, который представляет собой блок, доступен для распределителя JVM в том смысле, что событие из памяти произойдет из-за того, что этот блок в некотором смысле «пропускается».

Обратите внимание, что многие алгоритмы сбора мусора обычно делают прямо противоположное: они находят объекты и перемещают их, чтобы они занимали непрерывный блок памяти. Алгоритмы просто не обращают внимания на «мусор» объекты и рассматривают их как просто пустое пространство.

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

2

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

Путь к поиску недостижимых объектов - использовать интерфейс Java VM Tool (JVMTI) для перебора всех объектов в куче (достижимой или недоступной), чтобы найти тот, который вы ищете. Затем вы извлекаете его состояние через JVMTI и (каким-то образом) подтверждаете его, чтобы вы могли его отображать.

Обычно вы делаете это в отдельной JVM; например тот, который запускает ваш отладчик или инструмент профилирования. Но приложение может приложить к себе агент и использовать его для копирования в JVM. Однако это не предназначенное для JVMTI использование, и я бы предположил, что при этом могут быть «опасны».

Вы можете прочитать здесь:

Но, пожалуйста, не вините меня, если ты сходишь с ума, пытаясь получить эту работу.


UPDATE Я согласен с примечанием Марко, что вы вряд ли узнаете что-нибудь существенное, глядя на недоступных объектов.

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