2011-01-04 5 views
2

Javaアプリケーション用のエージェントを作成する必要があります。これは、すべての配列作成時に特定の作業を行います。これまで私はこのイベントで自分のコードを実行する方法を見つけることができませんでした。Javaエージェント、計装および配列の作成

  1. java.lang.instrument.ClassFileTransformerは「配列クラス」を取得しないため、「配列のコンストラクタ」にフックすることはできません。そして
  2. 「配列クラスが変更されることはありません」何JVMTIイベントは、この

に任意の提案に対応していませんか?

+0

各アレイの作成時にキャプチャするよりも、望ましい結果を得るための方がよいでしょう。あなたは何をしようとしているのですか? – jzd

答えて

3

これを行うには、アプリケーションのバイトコードを変更する必要があります。私はObjectWeb ASMが仕事のための最もよいツールであると分かった。あなたが興味のあるクラスをインターセプトJVMTIエージェントを作成

  1. あなたはASMクラスの変圧器への機器にしたいクラスを渡します。一般的な考え方は、にあります。
  2. クラストランスフォーマでは、配列の作成に関連するJavaオペコードをインターセプトできます。 ANEWARRAY(詳しくはJVM specを参照してください)。
+0

すべての配列の作成をキャプチャしたい。あなたはそれらのnewarrayの指示を見つけるためにすべてのクラスのすべてのメソッドをキャプチャすることを提案していますか? – Nikem

+0

@Nikem:メソッド定義を変更します。実行時にメソッド呼び出しをインターセプトしません。配列の作成を処理するために追加するコード以外のランタイムオーバーヘッドはありません。 – axw

関連する問題