2016-05-25 2 views
1

Активаторы JVMTI часто должны проходить кучу Java и посещать каждый живой объект ровно один раз. Один из методов состоит в вызове FollowReferences и избежать обхода данного объекта больше, чем один раз:Являются ли теги объектов, установленные JVM, видимыми для агентов JVMTI?

  • Пометка каждый объект посетил с использованием SetTag и
  • Фильтрация отмеченных объектов, например, установив JVMTI_HEAP_FILTER_TAGGED в флаги фильтра кучи.

Существует, однако, проблема при выборе подходящего значения тега. documentation для тегов объектов:

Теги местные для окружающей среды; т. е. теги одной среды не видны в другом.

Поскольку каждый агент JVMTI имеет свою собственную среду, это защищает одного агента от столкновения с тегами, установленными другим агентом. Однако в документации не указано, установлены ли теги, установленные самой JVM, например. во время сбора мусора, видны в среде JVMTI. Они видны или нет?

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

+0

Вы можете объяснить, почему функции [Итерации кучи] (https://docs.oracle.com/javase/8/docs/platform/jvmti/javmti.html#Heap_1_0) не подходят. Некоторые из них посещают каждый объект только один раз? –

+0

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

ответ

1

Чтение кода точки доступа в jvmtiTagMap.cpp и наблюдение, что соответствующий header file включен только в код JVMTI, кажется очень вероятным, что сборщик мусора не использует карту тегов для своей собственной маркировки.

Таким образом, ответ на вопрос почти наверняка заключается в том, что теги, установленные самим JVM, являются , а не, видимыми в среде JVMTI.

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