【问题标题】:Retrieve jobject within MethodEntry /MethodExit in JVMTI在 JVMTI 中的 MethodEntry / MethodExit 中检索作业
【发布时间】:2011-06-22 10:55:51
【问题描述】:

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

JVMTI API 我没有找到类似的东西。

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

【问题讨论】:

    标签: java jvmti


    【解决方案1】:

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

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

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


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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-19
      • 2022-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多