64位Java适用于小型独立应用程序。

3

是否值得将小型独立Java应用程序(最大:100-200MB堆)迁移到64位Java。 是否有任何特定的优点; 我的观察是,它只会增加应用程序的内存占用。

请分享您的经验/意见。

2个回答

5

根据官方FAQ:

64位和32位虚拟机的性能特点有什么不同?

通常情况下,与在32位虚拟机上运行同一应用程序相比,64位虚拟机能够寻址更大量的内存,但会带来一定的性能损失。这是因为系统中每个本地指针占用8个字节而不是4个字节。加载这些额外数据会对内存使用产生影响,这将导致执行Java程序时稍微变慢,具体取决于您的Java程序在执行过程中加载了多少指针。好消息是,在以64位模式运行的AMD64和EM64T平台上,Java虚拟机可以获得一些额外的寄存器,它可以利用这些寄存器生成更有效的本机指令序列。这些额外的寄存器提高了性能,以至于在比较32位和64位执行速度时通常没有性能损失。
在SPARC平台上,将应用程序从32位平台转移到64位平台的性能差异约为10-20%的降级。在AMD64和EM64T平台上,这种差异范围从0-15%不等,具体取决于应用程序执行期间访问指针的数量。

我认为,如果没有问题,就不要修复它。


3

如果您在x64上切换到64位,则可以利用64位寄存器和附加寄存器。这可能会提高5%的性能。

您可以使用-XX:+ UseCompressedOops 来使用相同的内存占用(它使用35位地址空间,最多可达32 GB的32位值),但我发现这最终会损失约5%的性能。


这个答案的关键点是:64位JVM使用32位引用,可以寻址32+3位地址空间,因为它可以假设对象地址的最低3位为0。它可以这样做是因为每个对象都对齐到8字节边界,而不是1字节边界。这使得JVM能够拥有一个堆,其可寻址35位或接近32 GB。 - Peter Lawrey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接