JVM: добавить хук в доступ к куче - PullRequest
0 голосов
/ 23 сентября 2018

Я надеюсь провести профилирующий анализ моего Java-проекта.Чтобы получить результаты, я хочу добавить «ловушку» в JVM, чтобы каждый раз, когда происходит доступ к куче, вызывался «ловушка» и выполнялась некоторая трассировка.Я изучал JVMTI , но это не дает мне того, что я ожидаю.

У меня есть несколько вопросов:

  • Можно ли добавить такиеловушка?
  • Если возможно, какие правильные инструменты / интерфейсы мне следует использовать?
  • Если не существует никаких инструментов, которые делают это, могу ли я добиться этого, изменив кодовую базу JVM?

Спасибо.

1 Ответ

0 голосов
/ 23 сентября 2018

Я хочу добавить «ловушку» в JVM, чтобы каждый раз, когда происходит доступ к куче

Вы не можете сделать это в Java, так как сама ловушка получит доступкуча и сама кал.Даже если вы обойдете это, это сделает программу невероятно медленной.

Что вы можете сделать, это использовать интерфейс отладки для точки останова после каждой инструкции, осмотреть инструкцию и посмотреть, получал ли она доступ к куче или нет.Возможно, это будет в 10 000 раз медленнее, чем обычно.

Альтернативой является перевод байт-кода с использованием Instrumentation для отслеживания каждого обращения к памяти.Это может быть всего в несколько сотен раз медленнее.

Чтобы эффективно делать то, что вы предлагаете, вы можете использовать https://software.intel.com/en-us/articles/intel-performance-counter-monitor, который используется такими инструментами, как perf в Linux.Это требует глубоких знаний о процессоре, который вы используете

...