Используйте BCI для вставки вызовов JNI вашему агенту, как показано в примере heapProfiler
, включенном в JVMTI. Вы можете передать объект в качестве параметра вашему методу (1); таким образом, вам не нужно слушать каждый вызов метода.
MethodEntry
события происходят для статических и собственных методов, поэтому для них нецелесообразно включать объект экземпляра, плюс JVMTI не рекомендует использовать MethodEntry
из-за его ужасной производительности.
Если вы действительно должны использовать MethodEntry
, тогда вы можете получить объект, обратившись к нему как к локальной переменной (GetLocalObject
). Он должен находиться в слоте 0 (проверьте с помощью таблицы локальных переменных).
(1) Вы не можете получить доступ к объектам, которые не были инициализированы, поэтому вам нужно вставить свой вызов после super
, если вы профилируете методы конструктора.