15

我最近有一项任务,我必须使用热代码替换功能。所以我使用 tools.jar 中提供的 Java Instrumentation API 来完成它。

eclipse 是否使用一些不同的逻辑来热替换新的类文件或使用相同的 Java API?我试图从一些地方阅读但不清楚:

Eclipse Java 调试器通过调试通道将新的类文件传输到另一个 JVM

Eclipse Hot Code Replace中的这一行不清楚。

4

2 回答 2

7

我相信 eclipse 使用相同的逻辑,它们都依赖于一个名为 JVMTI 的本机接口。JVMTI 提供工具来检查状态,并控制在 Java 虚拟机中运行的应用程序的执行。

Java Instrumentation Implementation中有一个JVMTI的代理。与 vm 对话并执行某些任务的代理。它也有 redefineClasses 方法。

Eclipse Java调试器或其他工具使用JPDA(Java Platform Debugger Architecture),JPDA主要有三个部分(JVMTI、JDWP、JDI)。JVMTI充当被调试者,JDI充当调试器,JDWP充当它们之间的通信通道。

最后,他们都与 JVMTI 对话,并且使用相同的逻辑。

于 2013-01-22T08:03:12.500 回答
4

不,调试器通常使用 JDI。

com.sun.jdi.VirtualMachine#redefineClasses

有关详细信息,请参阅以下链接。 http://docs.oracle.com/javase/7/docs/technotes/guides/jpda/index.html

于 2013-01-22T07:16:18.997 回答