次のタイプの呼び出しは、ウォームアップ後の多くの反復でほぼ同じ時間がかかることを示すように思われるマイクロベンチマークをまとめました。
static.method(arg);
static.finalAnonInnerClassInstance.apply(arg);
static.modifiedNonFinalAnonInnerClassInstance.apply(arg);
集約されたこれらの異なるタイプの呼び出しが異なるパフォーマンス特性を持つという証拠を見つけた人はいますか? 私の調査結果はそうではありませんが、少し驚くべきことがわかりました(特に、少なくとも静的呼び出しではバイトコードがまったく異なることを知っている)ので、他の人がいずれかの証拠を持っているかどうかを調べたいと思います。
それらが実際にまったく同じパフォーマンスを持っていた場合、それは、変更された非最終的なケースでそのレベルの間接性を持つことによるペナルティがないことを意味します.
標準的な最適化のアドバイスは「コードとプロファイルを記述してください」であることはわかっていますが、私はフレームワーク コード生成のようなものを書いているので、プロファイルする特定のコードはありません。また、静的と非最終のどちらを選択するかは、両方の柔軟性にとってかなり重要です。そしておそらくパフォーマンス。マイクロベンチマークでフレームワーク コードを使用しているため、ここに含めることはできません。
私のテストは、Windows JDK 1.7.0_06 で実行されました。