16

.NET と Java の実行環境で収集できた情報によると、現在の状況は次のとおりです。

ベンチマークはさておき、聖戦をエスカレートさせるつもりはないが、これは Java Hotspot VM が .Net よりも 1 世代進んでいることを意味するのだろうか。Java VM で採用されているこれらのテクノロジは、最終的に .NET ランタイムに組み込まれるのでしょうか?

4

4 に答える 4

15

彼らは2つの異なる戦略に従います。私は一方が他方より優れているとは思いません。

  • .NETはバイトコードを解釈しないため、実行されるときにすべてをJITする必要があり、時間の制約のために大幅に最適化することはできません。コードの一部で大幅な最適化が必要な場合は、いつでも手動でNGENを実行するか、高速で安全でない実装を実行できます。さらに、ネイティブコードの呼び出しは簡単です。ここでのアプローチは、ランタイムを十分に改善し、ボトルネックを手動で最適化することのようです。

  • 最近のJVMは通常、ほとんどのコードを解釈してから、ボトルネックの最適化されたコンパイルを実行します。これは通常、ストレートJITよりも良い結果をもたらしますが、もっと必要な場合はunsafe、Javaを使用していないため、ネイティブコードを呼び出すのは適切ではありません。したがって、ここでのアプローチは、他のオプションはそれほど良くないため、可能な限り多くの自動最適化を行うことです。

実際には、Javaアプリケーションは、.NETと比較した場合、時間的にはわずかにパフォーマンスが向上し、空間的にはパフォーマンスが低下する傾向があります。

于 2010-08-31T15:22:16.453 に答える
8

私は比較のために 2 つのベンチマークを行ったことはありません。また、Sun JVM の方が詳しいので、JIT については一般的な用語しか話せません。

最適化には常にトレードオフがあり、すべての最適化が常に機能するとは限りません。ただし、ここでは最新の JIT 手法をいくつか紹介します。技術的なことに固執すれば、これは良い会話の始まりになると思います。

VM の適切な実装に役立つ機能もあります。

  • GCを選択できる
  • 各 GC の実装のカスタマイズ
  • ヒープ割り当てパラメーター (成長など)
  • ページのロック

これらの機能やその他多くの機能に基づいて、VM を比較できます。「Java」と「.NET」だけでなく、たとえば、Sun の JVM と IBM の JVM と .NET と Mono を比較できます。

たとえば、Sun の JVM は末尾呼び出しの最適化 (IIRC) を行いませんが、IBM の JVM は行います。

于 2010-08-25T15:36:27.883 に答える
8

どうやら誰かがRotorに似たものに取り組んでいたようです。IEEE にアクセスできないので、アブストラクトを読むことができません。

.NET JIT コンパイラの動的再コンパイルとプロファイルに基づく最適化

まとめより引用…

一連のテスト プログラムを使用したフレームワークの評価では、パフォーマンスが最大で 42.3%、平均で 9% 向上することが示されています。私たちの結果は、インストルメンテーションを通じて正確なプロファイル情報を収集するオーバーヘッドが、実装におけるプロファイルに基づく最適化の利点をある程度上回ることも示しており、そのようなオーバーヘッドを削減できる手法を実装する必要があることを示唆しています。

于 2010-08-02T18:42:10.663 に答える
3

Tracing JIT コンパイラであるSPURに興味があるかもしれません。焦点は javascript にありますが、言語自体ではなく CIL で動作します。これは、標準の .NET VM ではなく Bartok に基づく研究プロジェクトです。この論文には、標準の 3.5 CLR である「SPUR-CLR より一貫して高速に動作する」ことを示すいくつかのパフォーマンス ベンチマークがあります。ただし、現在の VM に関連する将来についての発表はありません。トレースはメソッドの境界を越えることができますが、これは HotSpot が行うものではなく、JVM トレース JIT についてはこちらで言及されています。

すべてのサブシステム、特にジェネリックを考慮すると、.NET VM が 1 世代遅れているとは言いたくありません。GCDLRと invokedynamic の比較についてはよくわかりませんが、 channel9などの場所にそれらに関する詳細がたくさんあります。

于 2010-08-31T16:01:26.337 に答える