Java が C よりも遅い理由を浮動小数点計算で調べています。実際には、一部のアルゴリズムはあまり影響しません。C は Java よりも 3 ~ 4 倍高速です。しかし、浮動小数点計算では大きな違いがあります。誰でも私を助けることができますか?
2 に答える
C などの中級言語のコンパイラは、プラットフォームに依存しないバイトを変換するための 1 つの追加レイヤーを必要とする Java などの高レベル言語のインタープリターと比較して、ベクトル化やその他の手法を活用して同じ機能の速度を提供するのに十分スマートです。プラットフォーム固有のアセンブリへのコード。
仮想マシンには、ガベージ コレクションや JVM 内のスレッド スケジューリングなどの他のアクティビティのためにプログラムの状態を維持するための独自のオーバーヘッドがあります。
より具体的に言うと、JAVA 浮動小数点演算はすべての人を傷つけます。
Java の浮動小数点演算は、次の 5 つの不当な誤りによって損なわれています。
言語的に立法化された正確な再現性は、せいぜい単なる希望的観測にすぎません。
混合精度評価の 2 つの従来のポリシーのうち、Java は悪い方を選択しました。
IEEE 規格 754/854 で義務付けられている浮動小数点トラップとフラグの保護なしに解放された無限大と NaN は、Java の堅牢性に対する主張を裏切ります。
今日の浮動小数点ハードウェアの 95% 以上に組み込まれている機能へのアクセスを Java が拒否しているため、すべてのプログラマーの成功の見込みは薄れています。
- Java は、中置演算子のオーバーロードを多少規律のあるものでさえも拒否してきました。これがなければ、複素数、間隔、行列、幾何学的オブジェクト、任意の高精度などの日常的な数学的型を使用した算術の拡張が非常に不便になります。
Cはコンパイルされ、最終的に機械語になります。
Java はバイト コードにコンパイルされ、Java 仮想マシンによって解釈されます。
定義により、解釈されたコードはアセンブルされたコードよりも遅くなります (解釈された行ごとのアセンブリと考えることができます。たとえば、ループ内の場合など)。