2

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

  1. java.lang.instrument.ClassFileTransformer 没有得到“数组类”,因此无法挂钩到“数组的构造函数”。并且“数组类永远不可修改”
  2. 没有 JVMTI 事件对应于此

有什么建议么?

4

1 回答 1

3

为此,您需要修改应用程序的字节码。我发现ObjectWeb ASM是完成这项工作的最佳工具。总体思路是:

  1. 创建一个 JVMTI 代理来拦截您感兴趣的类。
  2. 将要检测的类传递给 ASM 类转换器。
  3. 在类转换器中,您可以截获与构造数组相关的 Java 操作码,例如 ANEWARRAY(更多信息请参见JVM 规范)。
于 2011-01-04T12:44:34.587 回答