6

「マジック」とは、純粋なJavaでは表現されないセマンティクスを持つメソッドを意味します。

nativeすべてのメソッドが魔法であり、その実装はJavaバイトコードではなく、基盤となるランタイムによって提供されることを私は知っています。

逆は本当ですか?すべての魔法のメソッドですかnative、それとも純粋なJavaで実装されているように見える魔法のメソッドがありますが、JVMの特別なケースからの追加の助けがありますか?

ユースケースは、バイトコードをインストルメント化することによってJavaのセマンティクスを変更したいというものです。これらの魔法の方法はすべて、私が何らかの方法で処理しなければならない特殊なケースです。それらnativeはすべて明白ですが、私が注意しなければならないマークされていない魔法の方法と特別な場合があるかどうか疑問に思いました。

4

2 に答える 2

5

残念ながら、ネイティブ メソッド以外に「魔法の」メソッドがあります。組み込みメソッドを見てみましょう - これらのメソッドは JIT に知られています。JIT は、メソッドのコンパイル時にハンドロール実装を使用し、 String.indexOf 、Integer.numberOfLeadingZerosなどの頻繁に呼び出されるメソッドを含みます。

いくつかの詳細と、どのメソッドが JVM に組み込まれているかを判別する方法については、こちらの Intrinsics を参照してください。バイトコードを挿入すると intrisification がオフになるかどうかはわかりませんが、選択した組み込み関数を無効にするために使用できる DisableIntrinsic XX オプションがあります。

于 2012-11-06T05:32:27.783 に答える
0

多くの詳細がAspectJですでに処理されていることに気付くかもしれません。手動のバイトコード操作を行う前に、それを調べます。

于 2012-11-06T05:34:27.280 に答える