JVM 32位和64位区别_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > JVM 32位和64位区别

JVM 32位和64位区别

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

class="MsoNormal" style="text-indent: 21.0pt;">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位环境中,任何东西都比原来大。

发表评论
用户名: 匿名