选择JVM方法调用

时间:2015-01-30 16:16:13

标签: java android jvm

如何用JVM在运行时执行所有带有参数的方法调用,并且可能有可能更改方法参数,在调用方法之前做一些事情,而不更改JVM代码本身?

我已经完成了

  1. 仪器(http://docs.oracle.com/javase/7/docs/api/java/lang/instrument/Instrumentation.html
  2. DTrace及其代码(http://github.com/dtrace4linux/linux),
  3. 但我是JVM如何在其中构建细节的新手,我的主要问题是 - 这是从这个代码开始的正确方法(Dtrace的代码)?也许你可以给我一篇文章来阅读?

    而且 - 我可以在ART或dalvik做同样的事情吗? (不仅可以在JDWP的帮助下调试应用程序)。

    还有一件事 - JMVTI速度太慢,调用处理程序需要近300μs。

    编辑:

    链接,我得到了:

    https://code.google.com/p/droidbox/

    http://mostly-about-java.blogspot.ru/2012/12/methodcallspy-building-own-method_3.html?m=1

    https://github.com/JakeWharton/hugo

    https://www.yourkit.com

1 个答案:

答案 0 :(得分:0)

从技术上讲,JVM可以使用自己的javaagent。或者,您可以使用AspectJ框架及其Load Time Weaver来简化此过程。

检查this article以获取一些代码的示例和存储库:https://bitbucket.org/espinosa/methodcallspy0

不幸的是,Dalvik / ART并不支持javaagent,所以这只适用于真实的' JVM,但不在Android上。