Агентам JVMTI часто требуется пройти через кучу Java и посетить каждый живой объект ровно один раз. Один из способов - вызвать FollowReferences и избежать обхода данный объект более одного раза:
- Пометка каждого посещенного объекта с помощью SetTag и
- Фильтрация помеченных объектов, например установив
JVMTI_HEAP_FILTER_TAGGED
во флагах фильтра кучи.
Однако существует проблема с выбором подходящего значения тега. В документации для тегов объектов говорится:
Теги являются локальными для среды; то есть теги одной среды не видны в другой.
Поскольку каждый агент JVMTI имеет свою собственную среду, это защищает один агент от конфликтов с тегами, установленными другим агентом. Однако в документации не указано, установлены ли теги самой JVM, например во время сборки мусора видны в среде JVMTI. Видны они или нет?
Если теги, установленные самой JVM, являются видимыми, агенту необходимо избегать конфликтов с любыми такими тегами, например сначала очистив все теги или выбрав тег, который еще не используется.
FollowReferences
, и сталкиваются с проблемой тегирования. Остальные находят живые и мертвые предметы, чего мы не хотели. - person Glyn Normington   schedule 25.05.2016