JVM 32位和64位区别

本文探讨了从32位环境过渡到64位Java时性能下降及内存消耗增加的原因。解释了64位环境带来的额外内存空间优势,并分析了其对程序性能的影响。同时介绍了使用64位JVM的优势,特别是针对需要大量内存的应用场景。讨论了64位Java与32位Java之间的性能差距,以及如何通过特定技术如Terracotta实现更大堆空间的利用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

WebSphere的社区有一篇有趣的博文,andrew解释了为什么从32java环境切换到64位时速度会下降15个百分比,并且内存消耗会提高50%. 后者使用复杂的64位大地址,并且大量使用64位的数据结构,即使他们仅仅需要的是32位的值。尽管带宽更大了, 但这就是性能下降的原因, 总的来说,处理内存缓存时并不能获得更多有效的字节数(因为好多32bit是废的,按照前面的说法). 因此,你肯定会经常遇到数据被移除L1,L2缓存。因此,缓存的丢失率提高,速度就有所下降啦。

既然如此,64位的JVM不能立即给你提升性能,为什么有人愿意去搞它呢?这个答案so easy. 如果使用64位,那么它将带来更多的地址空间,可以使用更多的内存(并且总线的吞吐量更大)。 换句话说,如果你运行的程序需要用到更多的内存,使用64位机器(JVM),那么你的内存可使用量将剧增。 如果你的程序不需要大于1.5GB的内存,那么可以不选择使用它。

为什么是1.5GB 实际上有可能还比他更小。 在一个4GB内存windows上的机器, 操作系统就占据了2GB的内存,剩下的2GB将分配给应用程序. JVM也是普通的应用程序,因此它也是需要内存的。 这些内存实际上就是JVM里面的堆空间了. 你的应用程序使用的内存就是这部分. 当虚拟机加载后,你就可以获取这些堆空间(还需要考虑到在后台工作的垃圾回收), 它在1.2GB1.8GB(毛算的值)之间,具体值依赖于系统的实际环境。

要使用更多的堆空间,只有转移到64位平台的JVM,或者使用Terracotta(一个JVM级别的分布式的缓存?). 后者(如果你没有听说Terracotta)是一个JVM集群式内存共享技术, 理论上这可以给你带来无限的堆空间.  或者,我可以这样来解释,堆空间相对于磁盘空间是有限的, 但是Terracotta在必要时可以输出到磁盘空间. 这就很好的解释了Terracotta是如何工作的.

回到64位内存消耗的问题:这个问题(为了获取更多的内存需求,运行在64bitjava程序与日俱增)是一个头痛的问题, 一台主机服务他们可以为多位SaaS客户运行了许多java程序,因为这样做可以节约很多成本, 让你可以做更多的事情。 IBM的虚拟机使用智能的指针编译规则可以在64位机器中创建高效字节位。 结果? 性能近和32bit相差5% 内存差距仅为3%

 

无论如何,你现在知道了为什么64java慢,并且内存占用大了。 64位环境中,任何东西都比原来大。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值