JVM 32位和64位区别

在WebSphere的社区有一篇有趣的博文,andrew解释了为什么从32位java环境切换到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.2GB到1.8GB(毛算的值)之间,具体值依赖于系统的实际环境。

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

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

 

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

©原创文章,转载请注明来源: 赵伊凡's Blog
©本文链接地址: JVM 32位和64位区别

“JVM 32位和64位区别”的34个回复

  1. Pingback: Blue Coaster33
  2. Pingback: tv packages
  3. Pingback: fue.mobi
  4. Pingback: parking
  5. Pingback: hurtigt lan penge nu
  6. Pingback: alkaline water
  7. Pingback: water ionizer
  8. Pingback: Instagram likes kopen
  9. Pingback: water ionizer plans
  10. Pingback: paypal loans
  11. Pingback: stop parking
  12. Pingback: electrician drill bit
  13. Pingback: j s locksmith
  14. Pingback: locksmith vallejo
  15. Pingback: house blue
  16. Pingback: useful source
  17. Pingback: plan
  18. Pingback: ionizer payment plan
  19. Pingback: ppl electric
  20. Pingback: alkaline water
  21. Pingback: website
  22. Pingback: right here
  23. Pingback: over here

发表评论

电子邮件地址不会被公开。 必填项已用*标注