当方法进入或方法退出事件被触发时,是否可以检索当前的作业?我想标记在某些方法上输入的作业。目前我只能检索定义类的方法,但不能检索对象。
在JVMTI API中我找不到任何类似的东西。
我可以遍历堆中定义类的方法的所有实例,但是,这不会给我任何关于该方法被调用的对象的任何信息。
使用BCI将 JNI 调用插入您的代理,如heapProfiler
JVMTI 附带的示例所示。您可以将对象作为参数传递给您的方法 (1);这样您就不必听每个方法调用。
MethodEntry
静态和本机方法会发生事件,因此它们包含实例对象是不合理的,而且 JVMTI 不鼓励使用,MethodEntry
因为它的性能很差。
如果您确实必须使用MethodEntry
,那么您可以通过将其作为局部变量 ( GetLocalObject
) 访问来获取该对象。它应该在插槽 0 中(使用局部变量表检查)。
(1) 您无法访问尚未初始化的对象,因此super
如果您正在分析构造函数方法,则需要在之后插入调用。