JVM如何在32位处理器上处理原始的“long”,即64位?

,点击 在多核32位机器上可以并行使用多个内核吗?
32位机器上64位操作的速度要慢多少?

有帮助吗?

解决方案

它可能使用多个内核来运行不同的线程,但它不会并行使用它们进行64位计算。 64位长基本上存储为两个32位整数。为了添加它们,需要两次添加,跟踪进位。乘法有点像两个两位数的乘法,除了每个数字在基数2 ^ 32而不是基数10之外。所以用于其他算术运算。

关于速度的编辑:我只能猜测速度差异。添加需要两个加法而不是一个,并且乘法(我认为)需要四个乘法而不是一个。但是,我怀疑如果一切都可以保存在寄存器中,那么计算的实际时间将相当于读取内存两次所需的时间和写入两次所需的时间,所以我的猜测大约是两倍于大多数时间。操作。我想这将取决于处理器,特定的JVM实现,月亮的阶段等。除非你做大量的数字运算,否则我不会担心它。大多数程序花费大部分时间等待IO进出磁盘或网络。

其他提示

来自 TalkingTree ,以及 Java HotSpot常见问题解答

  

通常,与在32位VM上运行相同的应用程序相比,能够处理大量内存的好处是64位VM中的性能损失很小。这是因为系统中的每个本机指针占用8个字节而不是4个。此额外数据的加载会对内存使用产生影响,这会导致执行速度稍慢,具体取决于执行期间加载的指针数量。你的Java程序。
  好消息是,在64位模式下运行AMD64和EM64T平台时,Java VM会获得一些额外的寄存器,可用于生成更高效的本机指令序列。这些额外的寄存器将性能提高到在比较32位到64位执行速度时通常没有性能损失的程度。

     

将64位平台上运行的应用程序与SPARC上的32位平台相比,性能差异在移动到64位VM时大约降低10-20% 。在AMD64和EM64T平台上,这种差异范围为0-15%,具体取决于访问应用程序的指针数量。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top