開発者として、仮想メソッドとインターフェイス メソッドの呼び出しのコストを知りたいです。invokeinterface
これで、が よりも遅くなる理由はわかりましたがinvokevirtual
、Sun がリリースした JVM の最新バージョンでinvokeinterface
. どうすればそのような情報を見つけることができますか?
1 に答える
Sun を買収した Oracle は、HotSpot JVM に関する Sun の古いホワイト ペーパーを次のサイトの Web サイトで入手できます。
http://java.sun.com/products/hotspot/docs/whitepaper/Java_HotSpot_WP_Final_4_30_01.html
invokevirtual
vsに関する最初の質問についてですinvokeinterface
が、Sun はこれを改善するために非常に積極的なパフォーマンスの最適化を数多く行ってきました。彼らが使用する多くの手法の 1 つはポリモーフィック インライン キャッシングと呼ばれ、インターフェイス ディスパッチの実行時のオーバーヘッドを通常のディスパッチと同等またはそれ以上のレベルまで大幅に簡素化できますinvokevirtual
。アイデアは、呼び出しサイトでよく使用される型を追跡する各呼び出しサイトの近くの小さなテーブルを追跡することです。インターフェイスメソッドが呼び出されるたびに、メソッドが呼び出されるオブジェクトの型を既知の型と比較することができ、それが一致する場合は、どのメソッドを呼び出す必要があるかを小さなキャッシュで検索することにより、呼び出しをすばやく行うことができます。
さらに、HotSpot は動的解析を使用して、特定のプログラム ポイントで、インターフェイス ポインターによって参照されるオブジェクトの型が特定の型であることを証明しようとしていると考えています。その場合、呼び出しを完全にインライン化するか、さらに動的なルックアップを必要とせずに解決できます。
お役に立てれば!