在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位环境中,任何东西都比原来大。
相关推荐
在计算机硬件领域,32位和64位系统分别对应不同的处理器架构,主要区别在于处理数据的能力和内存寻址范围。32位系统最多可以寻址4GB内存,而64位系统则支持更大内存,并且可以处理更大的数据量。 对于SWT库来说,32...
本篇文章将深入探讨JDK1.6 32位和64位版本的区别以及它们的适用场景。 首先,我们来看32位和64位JDK的区别。主要差异在于处理内存的方式和处理器指令集的兼容性: 1. 内存处理:32位操作系统和JDK最大可支持约4GB...
**exe4j与Java版本32位和64位详解** `exe4j`是一款用于将Java应用程序转换为Windows可执行文件(`.exe`)的工具。它允许开发者创建独立于JRE(Java运行环境)的Windows应用程序,使得非Java用户也能轻松运行Java...
标题中的"jre1.6安装版(含32位和64位)"表明这是一个包含了Java运行环境1.6版本的安装包,同时提供了适用于32位和64位Windows操作系统的版本。Java 1.6,也称为Java 6,是Oracle公司发布的一个重要版本,它在2006年...
32位和64位的JDK主要区别在于内存管理和处理能力。32位JDK在一台计算机上最多只能访问约4GB的RAM,而64位JDK理论上没有这种限制,可以处理更大的数据量和更复杂的程序。然而,32位版本在某些旧的或资源有限的系统上...
64位和32位版本的区别在于它们兼容的操作系统架构。64位版本的JNIRegistry.dll适用于64位版本的Windows操作系统,而32位版本则适用于32位版本的Windows。在64位操作系统上,32位应用通常可以在兼容模式下运行,但...
在选择JDK 8的安装时,用户通常会面临32位和64位版本的选择。这两个版本主要的区别在于它们支持的内存大小以及适用的操作系统类型。 1. **32位与64位的区别** - **内存限制**:32位操作系统最大支持约4GB的RAM,而...
首先,我们来理解一下64位和32位系统的基本区别。32位系统能够处理最大4GB的内存地址空间,而64位系统则可以处理远超过4GB的内存,理论上最高可达16EB(即18,446,744,073,709,551,616字节)。64位系统在性能、内存...
本压缩包提供了32位和64位两个版本,适用于不同类型的计算机系统。 1. **Java版本**:JDK 1.8,也被称为Java 8,是Java平台标准版的第八个主要版本。这个版本引入了许多新特性,如Lambda表达式、函数式编程接口、...
2. **数据类型长度**:在Java中,`int`类型的长度是固定的,为32位或4个字节,不受JVM是否为32位或64位的影响。 3. **GC(Garbage Collection)策略**: - **Serial GC**:这是单线程的垃圾收集器,适用于轻量级...
首先,我们来理解一下32位和64位的区别。32位系统和64位系统是根据处理器架构来区分的。32位系统最多可处理32位数据,内存寻址能力最高为4GB,而64位系统可以处理更大的数据,内存寻址空间理论上可达16EB,这使得64...
首先,让我们来了解一下32位和64位的区别。在计算机架构中,32位系统处理的数据宽度为32位,而64位系统则可以处理64位数据。这意味着64位系统在处理大量数据时更高效,可以支持更大的内存地址空间,通常能够提供更好...
7. 32 位 JVM 和 64 位 JVM 的最大堆内存:理论上说,32 位的 JVM 堆内存可以到达 2^32,即 4GB,但实际上会比这个小很多。64 位 JVM 允许指定最大的堆内存,理论上可以达到 2^64。 8. JRE、JDK、JVM 及 JIT 之间的...
本文将重点讨论Tomcat6在32位和64位操作系统下的差异以及其应用场景。 首先,32位与64位操作系统的主要区别在于内存管理和处理能力上。32位系统最大可寻址内存通常为4GB,而64位系统则可以支持更大的内存,理论上可...