我注意到Sun提供了64位版本的Java。它的性能是否优于32位版本?
答案 0 :(得分:18)
几乎总是64位会慢一些。
引用HotSpot FAQ中的Sun:
性能差异比较 一个运行在64位上的应用程序 平台与32位平台相比 SPARC约为10-20% 移动到64位时会降级 VM。在AMD64和EM64T平台上 差异范围从0-15%取决于 关于指针访问量 你的应用程序执行。
链接上有更多详细信息。
答案 1 :(得分:12)
定义您的工作量以及“执行”对您意味着什么。
这对我来说是一种令人不安的烦恼,作为一个长期存在的表演爱好者。特定变更“是否表现更好”首先取决于工作量,即您要求程序执行的操作。
64位Java在计算量很大的情况下通常会表现得更好。经典的Java程序具有大量的I / O负载和繁重的网络负载; 64位与32位可能无关紧要,但操作系统通常会这样做。
答案 2 :(得分:3)
我相信Azul支持384 GB的JVM,有人知道你能不能更高?
答案 3 :(得分:2)
在大多数CPU架构上,32位比64位快,其他条件相同。 64位指针需要两倍的带宽才能传输到32位。但是,x64指令集架构在x86上增加了一点理智,因此最终速度更快。长类型的处理量通常很小。
当然它还取决于Java的实现。除了编译器,您可能会发现实现方面的差异;例如,NIO假设64位指针。另请注意,Sun之前只为x64提供了更快的服务器HotSpot实施。这意味着如果您指定-d64
,您还将从客户端切换到服务器HotSpot,IIRC。
答案 4 :(得分:2)
一些改进:64位双精度运算的计算速度与32位浮点运算速度相同,以及64位长运算与int相比。
因此,如果您运行的代码数量很多,您可能会看到真正的改进。
答案 5 :(得分:2)
我知道这个问题已经很老了,投票的答案在撰写时可能是正确的。但是现在生活在2018年,情况发生了变化。
我只是在Java 8 32Bit JVM的Win 10 64Bit上运行的Java客户端应用程序遇到问题。它在26秒内从HttpsURLConnection
的{{1}} 读取了 174 MB 数据,速度非常慢。事实证明,服务器和网络不是此原因。
认为“嘿,32位和64位JRE之间不能有很大的区别”,直到我尝试让64位JVM执行完全相同的代码之前,它花了一些时间。幸运的是,我最终做到了:它在5秒内读取了相同的 174MB !
我不知道是否可以使它更快,但是关键要点是:
对于在Windows 10 64位上执行的非常相同 jar文件。
我不知道这可能是什么原因,但是我可以通过“是的,64位Java优于32位Java”来回答这个问题。另请参阅the answer of my question中有关此问题的数字。
答案 6 :(得分:1)
我的经历与其他答案不同。
Java 64bit可能比32位更快。至少我的测试一直都是!当使用少于4GB时,指针参数无效,因为64位VM也将在内部使用短指针。然而,您可以获得64位CPU的更快指令集!
我使用Windows 7和JDE1.8.0_144对此进行了测试,但可能真正的原因是内部JVM设置不同。当您使用64位JVM时,它以“服务器”模式启动,而32位VM以“客户端”模式启动。
答案 7 :(得分:-2)
是的,特别是如果您的代码是针对64位平台而构建的。