Видны ли теги объектов, установленные JVM, для агентов JVMTI?

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

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

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

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

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

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


person Glyn Normington    schedule 25.05.2016    source источник
comment
Вы можете объяснить, почему функции итерации кучи не подходят. Некоторые из них посещают каждый объект только один раз?   -  person Steve Powell    schedule 25.05.2016
comment
На самом деле они не лучше, и я не хотел отвлекаться от главного вопроса. По сути, есть два набора функций. Те, которые следуют ссылкам и, следовательно, могут использоваться для поиска только живых объектов, все имеют поведение, аналогичное FollowReferences, и сталкиваются с проблемой тегирования. Остальные находят живые и мертвые предметы, чего мы не хотели.   -  person Glyn Normington    schedule 25.05.2016


Ответы (1)


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

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

person Glyn Normington    schedule 08.06.2016