- PR -

javaのagentって具体的に何ですか

投稿者投稿内容
Jun
大ベテラン
会議室デビュー日: 2003/08/25
投稿数: 141
投稿日時: 2005-12-05 09:01
javaの引数に
-agentlib
-agentpath
-javaagent
などagentを冠したものがありますが具体的にどのようなものがagentとして
使われるんでしょうか
またagentを自作できるんでしょうか
シュン
ぬし
会議室デビュー日: 2004/01/06
投稿数: 328
お住まい・勤務地: 東京都
投稿日時: 2005-12-05 15:41
例えばこんなものですね。
http://java.sun.com/j2se/1.4/ja/docs/ja/guide/jvmpi/jvmpi.html
ちいにぃ
大ベテラン
会議室デビュー日: 2002/05/28
投稿数: 244
投稿日時: 2005-12-05 15:55
JVMPI (-Xrun...で起動)じゃないので、JVMTIじゃないかな。

オプションの意味は
JDKTM 5.0 ドキュメント
 → JDK ツールとユーティリティ
  → java - Java アプリケーション起動ツール
   → JVMTI エージェントのコマンド行オプション

使用例はJVMTIを使う
ちいにぃ
大ベテラン
会議室デビュー日: 2002/05/28
投稿数: 244
投稿日時: 2005-12-05 16:05
-javaagent オプションはJVMTIとは無関係ですね。

Googleでパッケージ名"java.lang.instrument"を検索すると、こんなのが見つかりました。

パッケージ java.lang.instrument

java.lang.instrument
J2SE 5.0 Tiger 虎の穴 Instrumentation
クラスワーキング・ツールキット: 注釈とASM 実行時でのクラスファイル修正を自動化する
さくらば
大ベテラン
会議室デビュー日: 2002/11/12
投稿数: 145
投稿日時: 2005-12-05 16:07
こんにちは、さくらばです。

引用:

ちいにぃさんの書き込み (2005-12-05 15:55) より:
JVMPI (-Xrun...で起動)じゃないので、JVMTIじゃないかな。



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
Jun
大ベテラン
会議室デビュー日: 2003/08/25
投稿数: 141
投稿日時: 2005-12-06 10:28
みなさんどうもご教示ありがとうございます

まだ良く理解したわけではありませんが,JVMTI(JVMPI)は最近C++にさわっていないことも
あり,何か開発するということは無いと思いますが,既存のものは使っていきたい
と思っています.
instrumentatonは今のところこれといった応用は思いつきませんが,バイトコード
の書き換えなどそのうち一度やってみたいと思います.
ただこうしたものがなくて今までやってきたわけで,新しい方法を取り入れるのは
ハードルが高いかも知れませんね
ちいにぃ
大ベテラン
会議室デビュー日: 2002/05/28
投稿数: 244
投稿日時: 2006-04-28 17:20
こんな記事を見つけたので、リンク貼っておきます。
- 独自のプロファイリング・ツールを構築する - Java 5のエージェント・インターフェースとAOPを使って理想的なプロファイラーを作る 2006年3月14日

ついでに、この話題の関連の発言へのリンクも。
- Java Solution会議室: クラスの中でバイトコードをダンプできますか
- Java Solution会議室: 再帰するインスタンスメソッドの自分の呼び出しについて

2006/09/27: BBCodeが間違っていたようなので修正

[ メッセージ編集済み 編集者: ちいにぃ 編集日時 2006-09-27 20:59 ]
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2006-04-29 00:39
事例ですが、
私はJUnit4.0をバックポートしたり、
コードカバレッジを計測する目的で使用しています。

-javaagentによって利用できる機能って、簡単に言うと、
・クラスのローディングをフックできる
・読み込まれたバイトコードをロードされる前に書き換えられる
という機能です。

バイトコードの書き換えは、専用のAPIが必要です。
asmやjavassist等が有名ですが、
SunのJDK5.0には書き換え用のライブラリが付属していて、
ApacheのBCELが付属しています。

スキルアップ/キャリアアップ(JOB@IT)