Я хочу добавить «ловушку» в JVM, чтобы каждый раз, когда происходит доступ к куче
Вы не можете сделать это в Java, так как сама ловушка получит доступкуча и сама кал.Даже если вы обойдете это, это сделает программу невероятно медленной.
Что вы можете сделать, это использовать интерфейс отладки для точки останова после каждой инструкции, осмотреть инструкцию и посмотреть, получал ли она доступ к куче или нет.Возможно, это будет в 10 000 раз медленнее, чем обычно.
Альтернативой является перевод байт-кода с использованием Instrumentation
для отслеживания каждого обращения к памяти.Это может быть всего в несколько сотен раз медленнее.
Чтобы эффективно делать то, что вы предлагаете, вы можете использовать https://software.intel.com/en-us/articles/intel-performance-counter-monitor, который используется такими инструментами, как perf
в Linux.Это требует глубоких знаний о процессоре, который вы используете