2011-09-06 9 views
5

私はバイトコード計測を使用してプロファイラを実現したい場合は、私はJVMTIを使用してネイティブエージェントを書くべきか、私はjava.lang.instrumentパッケージを使用してJavaエージェントを書くべきですか?バイトコード計測 - ネイティブまたはJavaエージェントを実装しますか?

ASMのようなライブラリを使用したい場合 - 深刻なプロファイラを作成する場合は必須と思われる - 私はJavaエージェントを使用する必要があります。これは、私がネイティブエージェントがJavaエージェントが何をすることができるかをすべて行うことができると思って以来、私を混乱させます。しかし私には、Javaエージェントを書く方が簡単です。

他に選択肢がありますか?とにかくJavaエージェントとネイティブエージェントを組み合わせるべきでしょうか?

答えて

5

公開されていないため、ほとんど誰もがC/C++バイトコードインストゥルメントをゼロから作成する必要がないため、(ASMまたはBCELを使用して)Javaエージェントを作成します。

初心者のJVMの計測とプロファイル/監視、ネイティブ関数へのアクセスにはJNI呼び出しが必要です。利用できないJVMTI呼び出しもいくつかあります(メモリが使用されている場合)。

私は数年前にCで自分のインストルを書いた、と私は(:-)私の邪悪な君主に応じて)私はオープンソースに期待し、新しいものを書くの過程にいるよ

方法についてハーフウェイハウス。ネイティブエージェントがバイトコードを送信する別の事前起動済みJVM。そのJVMでは、ASMベースのインストゥルメントを書くのが簡単ですが、ハードワークを行い、その結果のバイトコードをネイティブエージェントにワイヤで送信します。うん、少し複雑すぎるようですが、独自のBCIライブラリを書く方が簡単です。

+1

事前起動されたJVMはどういう意味ですか?それには2つのJVMが含まれますか? 1つはプロファイリング用で、もう1つは実際のアプリケーションを実行するものです。なぜネイティブエージェントはバイトコードを送信すべきですか?私はこれが避けられるべきだと思った。 –

関連する問題