3

据我了解,Java 6 中引入的 Attach API 允许通过代理对在目标JVM中运行的类进行进程间修改。我的问题是:

  1. 这种策略是否仅限于目标JVM尚未加载的类的检测?和
  2. 这些转换的限制是什么?例如,只能修改现有方法的主体?还是可以更改类定义中的所有内容?
4

1 回答 1

2
  1. 您可以通过使用ClassFileTransformer. 但是,如果重新转换的方法具有活动堆栈帧,则这些活动帧将继续运行原始方法的字节码。重新转换的方法将用于新的调用。
  2. 重新定义/重新转换可能会改变方法体、常量池和属性。重新定义/重新转换不得添加、删除或重命名字段或方法,更改方法的签名或更改继承。这些限制可能会在未来的版本中取消。在应用转换之前,不会检查、验证和安装类文件字节,如果结果字节有误,此方法将引发异常。

Instrumentation接口的 javadoc包含您询问的大部分信息。

于 2013-04-02T01:28:05.920 回答