VM による実行時およびコンパイル時の最適化に興味があります。私は、最適化はコンパイル時に最も効率的で簡単であるという考えを持っていました。
しかし、私の考えは特定の状況では間違っているようです。これは、ダニエルが引用したスティーブ・イェギーの声明で明らかです
[最適化] は、賢い仮想マシンによって実行時に実行されると、多くの場合簡単になります。
VM によって実行時に最適化を実行すると、コンパイル時よりも最適化が容易になるのはなぜですか?
VM による実行時およびコンパイル時の最適化に興味があります。私は、最適化はコンパイル時に最も効率的で簡単であるという考えを持っていました。
しかし、私の考えは特定の状況では間違っているようです。これは、ダニエルが引用したスティーブ・イェギーの声明で明らかです
[最適化] は、賢い仮想マシンによって実行時に実行されると、多くの場合簡単になります。
VM によって実行時に最適化を実行すると、コンパイル時よりも最適化が容易になるのはなぜですか?
VMは、データベースが使用状況について行うのと同様に、統計を収集して最適化できます。
統計を継続的に保持し、不変条件をチェックすることも、コンパイルまたは解釈されたフラグメントの実行時間のオーバーヘッドになります。迅速かつ十分に最適化できない場合でも、気にしないでください。コンパイル時ではなく実行時に行う方が、より良い結果を得るのが簡単だとは思いません。優れた実装の複雑さを考えると、さらに難しいと思います。
十分に優れた最適化コンパイラが人間よりも優れたアセンブリを生成するというよくある誤解と同じように、十分に賢い VM を実行するには、あまりにも賢すぎる必要があるかもしれません。
認識すべきことは、ランタイムの最適化を可能にするのはVMの概念ではなく、多くのVMが元のプログラムのメタデータを破棄せず、リフレクションの機能を組み込んでいるという事実です。使用するのにより適切な用語は、「ランタイムライブラリ」が静的最適化のみよりも優れた最適化を実行できることです。これは、Cなどの非VM言語に適用されます。