質問

基本的な質問:JVMは、JVMのプロファイリングとデバッグ用のネイティブAPIをJVMTIに提供します。 JVMインストゥルメンテーションも同じことを行います(それは正しいですか?)。はいの場合、両方の違いは何ですか?

役に立ちましたか?

解決

計装はJVMTIであるとは思わない。これらは両方とも独立して使用できるからです。

JVMTIはイベントに基づいており、イベントハンドラーでは、JVMに関する必要な情報をキャプチャできます。

計装は、バイトコードを変更するため、JVMにロードする前に、クラスの必要な場所で実行時に追加のコードを追加するためです。この余分なコードは実行されたときに、プロファイラーに必要な情報を収集するのに役立ちます。

機器は、ASMのようなさまざまなサードパーティの瓶の助けを借りて実現できます。

私の知識と経験によると、これらはどちらもJavaプロファイリング用であり、ネイティブプロファイリングではありません。

おそらく、より多くのドキュメントを読んで、より良い理解のためにさまざまなサンプルを試してみる必要があります。

他のヒント

JVMTIは、デバッガーが必要とするすべての機能を提供しますが、JVMTIが提供する以上のものが必要な場合は、計装を使用する必要があります。

JVMTIは、デバッグ、プロファイリングなどにあらゆる種類のイベントを提供する基本機能です。それが提供する領域の1つは、インターセプト(および再定義)クラスにアクセスすることです。 Java.lang.instrumentは、JVMTIの上にあるJavaラッパーであり、クラスのロードイベントで優しく簡単でアクセスしやすい方法を提供します。

JVMTIはjava.lang.instrumentの純粋なスーパーセットと考えますが、ユーザーにCコードを書く必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top