まず、これらの属性は一般的なバイトコード操作には必要ありません。これらは、JVMの計測機能を使用して Java エージェントの特別な機能を要求するために存在します。たとえば、バイトコードをアセンブルして新しいクラスを作成すると、それらがなくても機能します。
再定義とは、エージェントが任意の時点でInstrumentation. redefineClasses
、既存の (および既にロードされている) クラスの実際の定義を変更するために呼び出すことを意味します。エージェントは、新しい定義のバイトコードを提供します。
再変換とは、クラスのロード時に通常適用されるクラス ファイルの変換プロセスを指します。エージェントは、クラスが初期化される前にバイトコードに変換を適用するために次々に呼び出される を登録できClassFileTransformer
ます。したがって、再変換とは、すでにロードされているクラスに対してこのプロセスを繰り返す JVM の機能を指します。この場合、エージェントはInstrumentation.retransformClasses
再変換するクラスを指定して呼び出しますが、バイトコードは指定しません。ClassFileTransformer
代わりに、JVM は、実際のバイトコード (または連鎖トランスフォーマーの前のトランスフォーマーの結果) を提供するすべての登録済みの再変換可能な を呼び出します。
ネイティブ メソッド プレフィックスの設定はさらに特別です。ネイティブ メソッドをインストルメント化するときに役立つ場合があります。
おわかりのように、バイトコードをいじっているときに、これらすべての機能が常に必要になることはまずありません。