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 には主に 3 つの部分 (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 に答える