在JVMTI中的MethodEntry / MethodExit中检索jobject

时间:2011-06-22 10:55:51

标签: java jvmti

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

JVMTI API我找不到任何类似的内容。

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

1 个答案:

答案 0 :(得分:0)

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

静态和本机方法发生

MethodEntry个事件,因此它们包含实例对象是不合理的,而JVMTI由于其糟糕的性能而不鼓励使用MethodEntry

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


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