JVM は 32 ビット プロセッサ上で 64 ビットのプリミティブな "long" をどのように処理しますか?
マルチコア 32 ビット マシンで、複数のコアを並行して利用できますか?
32 ビット マシンでの 64 ビット操作はどれくらい遅くなりますか?
複数のコアを使用して異なるスレッドを実行する場合がありますが、64 ビットの計算ではそれらを並行して使用しません。64 ビット長は、基本的に 2 つの 32 ビット整数として格納されます。それらを加算するには、キャリー ビットを追跡しながら 2 つの加算が必要です。乗算は、2 つの 2 桁の数値を乗算するようなものですが、各桁が 10 進数ではなく 2^32 進数であることを除きます。他の算術演算についても同様です。
速度について編集:速度の違いについては推測することしかできません。加算には 1 回ではなく 2 回の加算が必要であり、乗算には (私が思うに) 1 回ではなく 4 回の乗算が必要です。ただし、すべてをレジスタに保持できる場合、計算の実際の時間は、読み取りに 2 回、書き込みに 2 回メモリに移動するのに必要な時間よりも小さいので、ほとんどの場合は約 2 倍の長さになると思います。オペレーション。プロセッサ、特定の JVM の実装、月の満ち欠けなどに依存すると思います。大量の計算処理を行っていない限り、私は気にしません。ほとんどのプログラムは、ほとんどの時間をディスクまたはネットワークとの間の IO の待機に費やしています。
TalkingTreeおよびJava HotSpot FAQから:
一般に、64 ビット VM では、同じアプリケーションを 32 ビット VM で実行する場合と比較して、大容量のメモリに対応できるという利点がありますが、パフォーマンスがわずかに低下します。これは、システム内のすべてのネイティブ ポインターが 4 バイトではなく 8 バイトを占めるという事実によるものです。あなたのJavaプログラム。
幸いなことに、AMD64 および EM64T プラットフォームが 64 ビット モードで実行されている場合、Java VM は、より効率的なネイティブ命令シーケンスを生成するために使用できる追加のレジスタを取得します。これらの余分なレジスターは、32 ビットと 64 ビットの実行速度を比較した場合にパフォーマンスの低下がほとんどないレベルまでパフォーマンスを向上させます。64 ビット プラットフォームで実行されているアプリケーションと SPARC の 32 ビット プラットフォームで実行されているアプリケーションを比較した場合のパフォーマンスの違いは、64 ビット VM に移行すると 10 ~ 20% 程度低下します。AMD64 および EM64T プラットフォームでは、アプリケーションが実行するポインターへのアクセスの量に応じて、この差は 0 ~ 15% の範囲になります。