Java代理,检测和数组创建

时间:2011-01-04 12:14:08

标签: java instrumentation jvmti

我需要为我的java应用程序编写一个代理程序,它在每个数组创建时执行一些特定的操作。到目前为止,我无法找到任何方法在此事件上运行我的代码。

  1. java.lang.instrument.ClassFileTransformer没有得到“数组类”,所以没办法挂钩“数组的构造函数”。并且“数组类永远不可修改”
  2. 没有JVMTI事件对应于此
  3. 有什么建议吗?

1 个答案:

答案 0 :(得分:3)

您需要修改应用程序的字节代码才能执行此操作。我发现ObjectWeb ASM是最适合这份工作的工具。一般的想法是:

  1. 创建一个拦截您感兴趣的类的JVMTI代理。
  2. 将要修改的类传递给ASM类转换器。
  3. 在类转换器中,您可以拦截与构造数组相关的Java操作码,例如: ANEWARRAY(更多信息见JVM spec)。