2

Javaagent の使用例を探してみると、ほとんどの場合、バイトコードを使用した例です。これらの例では、Javaassist などのサードパーティ ライブラリを使用しています。

私の知る限り、Java にはバイトコードを扱うための標準的な手段はなく、いずれにせよライブラリに頼る必要があります。

そのため、呼び出す前に、これらのライブラリを独自のカスタム クラスローダーで使用しようとしましたdefineClass()。そしてもちろん、それは完璧にうまく機能しました。ClassFileTransformerのメソッドで行う場合と同様に、バイトコードを同じ方法で変更できますtransform()

javaagents には別の便利な機能があり、それが主な機能であることを正しく理解していますか? まず第一に、javaagent はInstrumentationオブジェクトを提供し、Java 仕様では、instrumentパッケージは主にバイトコードを操作するために使用されると述べているためです。instrumentしかし、独自のクラスローダを実装できる (パッケージが導入されるずっと前に実装できた) だけであるのに、なぜそれを行う必要があるのでしょうか?

4

3 に答える 3

2

アプリケーションの一部ではないため、javaagent の使用は異なると思います。たとえば、プロファイリング エージェントを記述して、任意のアプリケーションで使用できます。

于 2013-09-23T14:49:07.270 に答える