是否值得将小型独立Java应用程序(最大:100-200MB堆)迁移到64位Java。 是否有任何特定的优点; 我的观察是,它只会增加应用程序的内存占用。
请分享您的经验/意见。
是否值得将小型独立Java应用程序(最大:100-200MB堆)迁移到64位Java。 是否有任何特定的优点; 我的观察是,它只会增加应用程序的内存占用。
请分享您的经验/意见。
根据官方FAQ:
64位和32位虚拟机的性能特点有什么不同?
通常情况下,与在32位虚拟机上运行同一应用程序相比,64位虚拟机能够寻址更大量的内存,但会带来一定的性能损失。这是因为系统中每个本地指针占用8个字节而不是4个字节。加载这些额外数据会对内存使用产生影响,这将导致执行Java程序时稍微变慢,具体取决于您的Java程序在执行过程中加载了多少指针。好消息是,在以64位模式运行的AMD64和EM64T平台上,Java虚拟机可以获得一些额外的寄存器,它可以利用这些寄存器生成更有效的本机指令序列。这些额外的寄存器提高了性能,以至于在比较32位和64位执行速度时通常没有性能损失。
在SPARC平台上,将应用程序从32位平台转移到64位平台的性能差异约为10-20%的降级。在AMD64和EM64T平台上,这种差异范围从0-15%不等,具体取决于应用程序执行期间访问指针的数量。
我认为,如果没有问题,就不要修复它。
如果您在x64上切换到64位,则可以利用64位寄存器和附加寄存器。这可能会提高5%的性能。
您可以使用-XX:+ UseCompressedOops
来使用相同的内存占用(它使用35位地址空间,最多可达32 GB的32位值),但我发现这最终会损失约5%的性能。