4

現在、プロファイラーが内部でどのように機能するかを調査中です。

JVMPIという名前の古いAPIと、に基づく「新しい」APIがあるようjava.lang.instrumentです。私は、プロファイラーがすべてのクラスのバイトコードを計測し、ソケット情報を介して特定のプログラムのオープンポイントを呼び出すフックを挿入することで、プロファイラーとの通信を確立することを考えました。これは標準的なアプローチですか?アプローチはかなり異なりますか?

ありがとう

4

2 に答える 2

2

参考までに、「 JVMTIはJDK5.0で導入されました。JVMTIは、Java仮想マシンプロファイラインターフェイス(JVMPI)およびJava仮想マシンデバッグインターフェイス(JVMDI)に置き換わるものです。標準のプロファイラーは、ここでjvisualvm提案されているように、たとえばガベージコレクションを実行および監視するためにAPIを広範囲に使用します。Java Management Extensions(JMX)は、一般的な通信レイヤーです。

于 2013-02-17T08:08:52.820 に答える
1

私はこれに関する専門家ではありませんが、JVMPIとJVMTIの動作は異なるようです。

  • JVMPIは、プロファイリングが有効になっているときにJVMが発行する「イベント」を処理するエージェントによって機能するようです。イベント発行ロジックがJVMに組み込まれているようです。

  • JVMTIは、ロード時にエージェントにメソッドにバイトコードを挿入させることで(プロファイリングのために)機能するようです。

(これは、上記のリンクにあるように、それぞれの仕様を簡単に読んだものです。)

于 2013-02-17T13:19:54.420 に答える