当前位置:  开发笔记 > 编程语言 > 正文

Java:VM如何在32位处理器上处理64位`long`

如何解决《Java:VM如何在32位处理器上处理64位`long`》经验,为你挑选了2个好方法。

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

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



1> Andru Luvisi..:

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

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



2> VonC..:

来自TalkingTree和Java HotSpot FAQ:

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

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

推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有