Получить задание в MethodEntry / MethodExit в JVMTI - PullRequest
0 голосов
/ 22 июня 2011

Можно ли получить текущий объект задания, когда вызвана запись метода или метод выхода? Я хотел бы отметить объекты, которые вводятся определенными методами. В настоящее время я могу получить только метод, определяющий класс, но не объект.

В API JVMTI Я не нахожу ничего похожего.

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

1 Ответ

0 голосов
/ 16 апреля 2012

Используйте BCI для вставки вызовов JNI вашему агенту, как показано в примере heapProfiler, включенном в JVMTI. Вы можете передать объект в качестве параметра вашему методу (1); таким образом, вам не нужно слушать каждый вызов метода.

MethodEntry события происходят для статических и собственных методов, поэтому для них нецелесообразно включать объект экземпляра, плюс JVMTI не рекомендует использовать MethodEntry из-за его ужасной производительности.

Если вы действительно должны использовать MethodEntry, тогда вы можете получить объект, обратившись к нему как к локальной переменной (GetLocalObject). Он должен находиться в слоте 0 (проверьте с помощью таблицы локальных переменных).


(1) Вы не можете получить доступ к объектам, которые не были инициализированы, поэтому вам нужно вставить свой вызов после super, если вы профилируете методы конструктора.

...