4

バイトコード インストルメンテーションとは何かを知っています。実行時に .class ファイルのバイトコードを変更するだけで、JDK 1.5 以降で利用できるようです。ただし、正確には実行時ではなく、クラスのロード中にあると言われています。

ここで私の質問は、AOT または Ahead of Time インストルメンテーションとは何ですか? 逆の手続きとは?時間の経過とともに計装?

コードの計測
Quasar ファイバーは、バイトコードの計測に依存しています。これは、 を介したクラスロード時Java Agent、または Ant タスクを使用したコンパイル時に実行できます。

インストルメンテーションの実行
Java AgentQuasarの軽量スレッド実装は、バイトコード インストルメンテーションに依存しています。インストルメンテーションは、コンパイル時 (詳細は後述) または実行時に Java エージェントを使用して実行できます。Java エージェントを実行するには、次を java コマンドラインに追加する必要があります (または、任意のビルド ツールを使用して、これを JVM 引数として追加します)。

-javaagent:path-to-quasar-jar.jar

Ahead-of-Time (AOT) インストルメンテーション
Quasar を使用してプログラムをインストルメント化する簡単で好ましい方法は、実行時にコードをインストルメント化する Java エージェントを使用することです。ただし、Java エージェントを実行できない場合もあります。

Quasar は、Ant タスクによる AOT 計測をサポートしています。タスクは co.paralleluniverse.fibers.instrument.InstrumentationTaskにあり quasar-core.jar、計測するクラスのファイルセットを受け入れます。すべてのクラスが実際にインスツルメントされるわけではありません – suspendable methods を持つクラスのみ (以下を参照) – 単純に、プログラム内のすべてのクラス ファイルをタスクに与えます。実際、クエーサー自体は 事前に計測されています。

ソース

4

1 に答える 1

6

事前 (AOT) コンパイル/インストルメンテーションは、プログラムを実行する前に行われます。

AOT の反対は、ジャストインタイム (JIT) です。実行時に発生します。Java では、クラスのロードは実行時に行われ、それをいじる仕組みがあります。

あなたの例では、プログラムを実行する前にAntタスクを介してAOT計測が行われ、変更がファイルに書き込まれ.classます。

もう 1 つの可能な方法は、Java エージェントを使用して JIT を実行することです。この場合、インストルメンテーションは実行時にクラスがロードされたときに行われ、結果はファイルに書き込まれず、クラスがロードされるたびに新たに実行する必要があります。

詳細については、ウィキペディア/事前コンパイルおよびウィキペディア/ジャストインタイム コンパイルを参照してください。

于 2016-05-12T07:15:25.020 に答える