0

当方法进入或方法退出事件被触发时,是否可以检索当前的作业?我想标记在某些方法上输入的作业。目前我只能检索定义类的方法,但不能检索对象。

JVMTI API中我找不到任何类似的东西。

我可以遍历堆中定义类的方法的所有实例,但是,这不会给我任何关于该方法被调用的对象的任何信息。

4

1 回答 1

0

使用BCI将 JNI 调用插入您的代理,如heapProfilerJVMTI 附带的示例所示。您可以将对象作为参数传递给您的方法 (1);这样您就不必听每个方法调用。

MethodEntry静态和本机方法会发生事件,因此它们包含实例对象是不合理的,而且 JVMTI 不鼓励使用,MethodEntry因为它的性能很差。

如果您确实必须使用MethodEntry,那么您可以通过将其作为局部变量 ( GetLocalObject) 访问来获取该对象。它应该在插槽 0 中(使用局部变量表检查)。


(1) 您无法访问尚未初始化的对象,因此super如果您正在分析构造函数方法,则需要在之后插入调用。

于 2012-04-15T20:35:53.243 回答