我需要为我的Java应用程序编写一个代理,该应用程序在每个数组创建中都会做一些特定的内容。到目前为止,我找不到在此事件上运行代码的任何方法。

  1. java.lang.instrument.classfiletrytransformer不会获得“数组类”,因此无法将其连接到“数组的构造函数”中。和“数组类永远是可修改的”
  2. 没有JVMTI事件对应于此

有什么建议么?

有帮助吗?

解决方案

您需要修改应用程序的字节代码才能做到这一点。我找到了 ObjectWeb ASM 成为工作的最佳工具。一般的想法是:

  1. 创建一个JVMTI代理,该代理拦截您感兴趣的类。
  2. 将您要仪器的课程传递给ASM类变压器。
  3. 在类变压器中,您可以拦截与构造数组相关的Java Opcodes,例如AneWarray(请参阅 JVM规格 更多)。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top