2014-10-17 4 views
0

У меня возникла проблема с взаимодействием с библиотекой скриптов и для проверки моего подозрения, которое я хотел бы отслеживать, когда экземпляры определенных классов являются GCd (либо в Eclipse, либо в JVisualVM, либо с помощью опции JVM командной строки). Мне не нужно различать экземпляры классов, так как я могу ограничить проблему одним экземпляром.Отслеживание сбора мусора

Возможно ли это с запасом VM?

+1

Создайте [PhantomReference] (http://docs.oracle.com/javase/7/docs/api/java/lang/ref/PhantomReference.html) для этого объекта, зарегистрированного в определенной очереди ссылок. – apangin

ответ

3

Я не думаю, что вы можете сделать это со стороны. Обычно GC работает так, что он принимает меры к файлам сохранения, а «сбор» мусора является просто неявным: регионы памяти просто определяются как доступные для выделения.

. Ближайший, который вы можете получить, уведомляется, когда объект достиг финализированного состояния, которое еще до его фактического сбора. С этой целью вы можете добавить код, который будет создавать PhantomReference s на интересующие вас объекты и зарегистрировать их с помощью ReferenceQueue. Вы можете контролировать очередь для завершенных объектов. Обратите внимание, что в спецификации этих механизмов есть много «в то время или в более позднее время»; вы не можете рассчитывать на точность в реальном времени.

Также обратите внимание, что указанный выше механизм нарушит наблюдаемую систему, и он не будет действовать так же, как при отсутствии фантомных ссылок на дорожку.

1

Вы можете создать коллекцию объектов java.lang.ref.WeakReference, по одному для каждого из объектов, которые вы хотите посмотреть. Вы можете использовать механизм ReferenceQueue для уведомления, когда целевые объекты заявлены GC.

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