Java仮想マシンの命令セットページには、aaload、aastoreなどのニーモニックに関する情報が表示されます。
ただし、これらのニーモニックが使用するCPUサイクルについては言及されておらず、これらのニーモニックのバイトサイズやワードサイズに関する情報もありません。
この情報がどこにあるか考えてみませんか?
2 に答える
すでに述べたように、あなたが探している情報は存在しないのでそこにはありません。また、JVMが異なれば命令(または命令の組み合わせ)を異なる方法で実装できるという事実とは別に、単一のJVMでも異なる方法で実装できます。
これは、命令のさまざまな組み合わせ(他の命令と一緒に使用する方法に応じて、さまざまな方法で命令を実装する方が効率的かもしれません)と実行のさまざまな機会の両方に当てはまります。JVMは常にプログラムの実行を制御しているため、プログラムの動作を監視し、頻繁に実行されるコード(またはその他の基準を満たすコード)を再最適化することを決定できます(実際に実行します)。これにより、たとえば、関数が実行される最初の1000回は、命令が特定のマシン命令のセットに変換され、残りの実行は別のセットに変換される可能性があります。
この高度な最適化機能(およびその他)は、Javaバイトコードの最適化をJVMに任せるのが最善である理由であり、場合によっては、Javaプログラムが同等のCまたはC ++プログラムよりも大幅に高速になる可能性がある理由です(CおよびC ++は通常のみです)静的に最適化されますが、Javaは動的に最適化されます)。
仕様は、JVMが実装する必要があるものであり、実装方法ではありません。IBMやSunなどのベンダーとは異なるプラットフォームおよび異なるJVMは異なる実装を使用するため、バイトサイズとプロセッササイクルについては何も想定できません。本当に詳細を知りたい場合は、Open JDKソースをダウンロードして確認できますが、これは1つの実装にすぎず、他の実装がまったく同じパフォーマンス特性を持つとは限りません。