- - PR -
javaのagentって具体的に何ですか
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-12-05 09:01
javaの引数に
-agentlib -agentpath -javaagent などagentを冠したものがありますが具体的にどのようなものがagentとして 使われるんでしょうか またagentを自作できるんでしょうか | ||||
|
投稿日時: 2005-12-05 15:41
例えばこんなものですね。
http://java.sun.com/j2se/1.4/ja/docs/ja/guide/jvmpi/jvmpi.html | ||||
|
投稿日時: 2005-12-05 15:55
JVMPI (-Xrun...で起動)じゃないので、JVMTIじゃないかな。
オプションの意味は JDKTM 5.0 ドキュメント → JDK ツールとユーティリティ → java - Java アプリケーション起動ツール → JVMTI エージェントのコマンド行オプション 使用例はJVMTIを使う | ||||
|
投稿日時: 2005-12-05 16:05
-javaagent オプションはJVMTIとは無関係ですね。
Googleでパッケージ名"java.lang.instrument"を検索すると、こんなのが見つかりました。 パッケージ java.lang.instrument java.lang.instrument J2SE 5.0 Tiger 虎の穴 Instrumentation クラスワーキング・ツールキット: 注釈とASM 実行時でのクラスファイル修正を自動化する | ||||
|
投稿日時: 2005-12-05 16:07
こんにちは、さくらばです。
Tiger からは JVMPI は Deprecated で、JVMTI が代りに使われます。 -agentlib/-agentpath -> JVMTI -javaagent -> instrumentation です。 JVMTI はデバッグとかプロファイルに使われるもので、C/C++ で記述します。 機能的には JVMTI = JVMPI + JVMDI + アルファ です。 instrumentation はクラスの再定義とか、バイトコードの書き換えとかをする ために使用されます。こちらは Java で記述できます。 instrumentation についてはこちらを参考にしてください。 http://www.javainthebox.net/laboratory/J2SE1.5/MiscAPI/Instrumentation/Instrumentation.html | ||||
|
投稿日時: 2005-12-06 10:28
みなさんどうもご教示ありがとうございます
まだ良く理解したわけではありませんが,JVMTI(JVMPI)は最近C++にさわっていないことも あり,何か開発するということは無いと思いますが,既存のものは使っていきたい と思っています. instrumentatonは今のところこれといった応用は思いつきませんが,バイトコード の書き換えなどそのうち一度やってみたいと思います. ただこうしたものがなくて今までやってきたわけで,新しい方法を取り入れるのは ハードルが高いかも知れませんね | ||||
|
投稿日時: 2006-04-28 17:20
こんな記事を見つけたので、リンク貼っておきます。
- 独自のプロファイリング・ツールを構築する - Java 5のエージェント・インターフェースとAOPを使って理想的なプロファイラーを作る 2006年3月14日 ついでに、この話題の関連の発言へのリンクも。 - Java Solution会議室: クラスの中でバイトコードをダンプできますか - Java Solution会議室: 再帰するインスタンスメソッドの自分の呼び出しについて 2006/09/27: BBCodeが間違っていたようなので修正 [ メッセージ編集済み 編集者: ちいにぃ 編集日時 2006-09-27 20:59 ] | ||||
|
投稿日時: 2006-04-29 00:39
事例ですが、
私はJUnit4.0をバックポートしたり、 コードカバレッジを計測する目的で使用しています。 -javaagentによって利用できる機能って、簡単に言うと、 ・クラスのローディングをフックできる ・読み込まれたバイトコードをロードされる前に書き換えられる という機能です。 バイトコードの書き換えは、専用のAPIが必要です。 asmやjavassist等が有名ですが、 SunのJDK5.0には書き換え用のライブラリが付属していて、 ApacheのBCELが付属しています。 |