`
zyslovely
  • 浏览: 231130 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

jvm32位、64位区别

 
阅读更多
理论上来说32位的JVM有4G的堆大小限制。但是因为各种条件限制比如交换区,内核地址空间使用,内存碎片,虚拟管理机的管理开销,实际上可用的堆的大小远远比理论上的4G要少。
在32位windows的机器上,堆最大可以达到1.4G至1.6G。
在32位solaris的机器上,堆最大可以达到2G
而在64位的操作系统上,32位的JVM,堆大小可以达到4G

补充一句,在使用java参数-xms -xmx定义堆大小的时候,
1. 如果是32bit的jvm超过4G肯定是没用的,定义了4G,最终使用到的可能只有2G
2. 这两个值最好定义成一样,可以减少java gc的操作,有小幅度性能提高



JVM是Java开发人员必不可少的工具,而JVM也有32 bit和64 bit之分.
那实际上32位和64位JDK有什么区别呢?
JVM 32bit 和JVM 64bit的区别如下:
  1目前只有server VM支持64bit JVM,client不支持32bit JVM。
  2 .The Java Plug-in, AWT Robot and Java Web Start这些组件目前不支持64bit JVM
  3.本地代码的影响:对JNI的编程接口没有影响,但是针对32-bit VM写的代码必须重新编译才能在64-bit VM工作。
  4.32-bit JVM堆大小最大是4G, 64-bit VMs 上, Java堆的大小受限于物理内存和操作系统提供的虚拟内存。(这里的堆并不严谨)
  5.线程的默认堆栈大小:在windows上32位JVM,默认堆栈最大是320k 64-bit JVM是1024K。
  6.性能影响:
    (1)64bit JVM相比32bit JVM,在大量的内存访问的情况下,其性能损失更少,AMD64和EM64T平台在64位模式下运行时,Java虚拟机得到了一些额外的寄存器,它可以用来生成更有效的原生指令序列。
    (2)性能上,在SPARC 处理器上,当一个java应用程序从32bit 平台移植到64bit平台的64bit JVM会用大约 10-20%的性能损失,而在AMD64和 EM64T平台上,其性能损失的范围在0-15%.

以上摘自http://java.sun.com/docs/hotspot/HotSpotFAQ.html#64bit_description

JVM 性能分析
Sun的官网上写着,当一个java应用程序从32bit 平台移植到64bit平台的64bit JVM上,应用会有性能损失,相信很多人都会不解。
从数字上看,我们一般会认为64位JDK比32位JDK好,但是上文说过"实际上在32bit应用程序下,32bit处理器的性能甚至会更强,即使是64bit处理器,目前情况下也是在32bit应用下性能更强"。

许多在大同世界里很简单的道理包括越多大越好,移到计算机领域里就不是那么回事了。当处理多重CPU时,你会觉得那些多核所多出来的处理单元很有用,但如果你的工作仅仅是单线程的,那你要做的却是让其他核一边歇着。

32位与64位的比较则更加细微。x86-64 架构不仅在x86架构的基础上增大了寄存器,而且还增加了寄存器的数量。从基本上说这会带来更好的性能(因为更多的寄存器可以让编译器创建更好的机器代码)。然而很不幸,至今把Java从32位移到64位带来的只是性能的下降。

Java虚拟机(JVM)是一个软件规范,其32位与64位版本性能有所不同,但它们都包括JIT编译器和垃圾回收功能(GC),其性能关键在JIT编译器和垃圾回收功能的执行效率上。       JIT编译器实现了程序执行之前Java字节码到硬件机器码的动态翻译,其背后的思想在于,相比Java源代码,字节码更小也更容易编译,但付出的代价是需要在Java字节码编译为机器码时花上一点时间,但与直接把Java源代码编译为机器码相比,时间还是少得多的。在32位与64位的JVM中,相应的JIT在把Java字节码编译为最终的机器码时,所花的时间稍微有所不同,但还能进行一些优化;另外,在IBM与Sun这两个版本的客户端与服务端程序上,总体性能也会有所不同。 垃圾回收会收回对象不再需要使用的内存,它必须被经常执行以释放对象不再访问的Java堆。由于在32位与64位平台上,Java堆中的数据大小会有所变化,所以会因为32位与64位JVM的性能差异,然而指针越大越GC管理越困难,导致相应垃圾回收的性能也会有所不同。
分享到:
评论
1 楼 fnet 2014-06-23  
是的,同样一个应用程序,jdk32 确实比 jdk64内存使用更小,而且小很多。

相关推荐

    SWT32位和64位库

    在计算机硬件领域,32位和64位系统分别对应不同的处理器架构,主要区别在于处理数据的能力和内存寻址范围。32位系统最多可以寻址4GB内存,而64位系统则支持更大内存,并且可以处理更大的数据量。 对于SWT库来说,32...

    JDK1.6 32位和64位官方版

    不过,需要注意的是,即使在64位系统上,JVM也可能会限制单个应用的堆内存大小,但这通常远超32位系统的限制。 2. 处理器指令集:64位JDK利用了现代64位处理器的指令集,提供更快的计算速度和更高的效率。而32位JDK...

    exe4j+Java版本32位和64位

    **exe4j与Java版本32位和64位详解** `exe4j`是一款用于将Java应用程序转换为Windows可执行文件(`.exe`)的工具。它允许开发者创建独立于JRE(Java运行环境)的Windows应用程序,使得非Java用户也能轻松运行Java...

    jre1.6安装版(含32位和64位)

    2. **32位与64位JRE的区别**: - **内存管理**:64位JRE可以访问更大的内存空间,适合处理大数据和内存密集型应用。 - **兼容性**:32位JRE可以运行在32位或64位操作系统上,但64位JRE只能在64位操作系统上运行。 ...

    64位与32位 rxtxserial.dll/rxtxParallel.dll

    首先,我们来理解一下64位和32位系统的基本区别。32位系统能够处理最大4GB的内存地址空间,而64位系统则可以处理远超过4GB的内存,理论上最高可达16EB(即18,446,744,073,709,551,616字节)。64位系统在性能、内存...

    jre-8u321-windows32位64位合集.rar

    3. **32位与64位的区别**: 32位JRE适用于32位操作系统的计算机,它可以访问的最大内存大约为4GB。而64位JRE可以处理更大的内存地址空间,理论上支持的内存大小无上限,且通常在性能上优于32位版本,尤其是在处理大量...

    jdk-8u321-windows32位64位合集.rar

    对于Windows操作系统,32位和64位版本的JDK有以下区别:32位版本的JDK在32位操作系统上运行,最多可访问4GB内存;而64位版本则可以充分利用64位系统的资源,理论上内存访问不受限制,且通常在处理大数据和计算密集型...

    tomcat6 64位 tomcat6 32位

    《深入理解Tomcat6:32位与64位的区别及应用》 Tomcat作为Apache软件基金会的一个开源项目,是Java Servlet和JavaServer Pages(JSP)技术的标准实现,广泛应用于各类Web应用的部署和运行。本文将重点讨论Tomcat6在...

    JDK1.8(32位和64位均可正常使用).rar

    32位和64位的JDK主要区别在于内存管理和处理能力。32位JDK在一台计算机上最多只能访问约4GB的RAM,而64位JDK理论上没有这种限制,可以处理更大的数据量和更复杂的程序。然而,32位版本在某些旧的或资源有限的系统上...

    jre-8u231-windows32位64位合集.rar

    "jre-8u231-windows32位64位合集.rar"是一个包含32位和64位版本的Java运行时环境的压缩文件,适用于Windows操作系统。这个压缩包包含了两个文件:`jre-8u231-windows-x64.exe` 和 `jre-8u231-windows-i586.exe`,...

    JVM 77 道面试题及答案.docx

    7. 32 位 JVM 和 64 位 JVM 的最大堆内存:理论上说,32 位的 JVM 堆内存可以到达 2^32,即 4GB,但实际上会比这个小很多。64 位 JVM 允许指定最大的堆内存,理论上可以达到 2^64。 8. JRE、JDK、JVM 及 JIT 之间的...

    weblogic 11g 32位 64位 各版本

    #### WebLogic 11g 的32位与64位版本区别 1. **内存限制**: - **32位版本**:由于地址空间的限制,32位操作系统只能访问最大4GB的物理内存。这可能会限制大型应用程序或数据密集型应用的性能。 - **64位版本**:...

    JNIRegistry.dll的64位和32位

    64位和32位版本的区别在于它们兼容的操作系统架构。64位版本的JNIRegistry.dll适用于64位版本的Windows操作系统,而32位版本则适用于32位版本的Windows。在64位操作系统上,32位应用通常可以在兼容模式下运行,但...

    JDK 8 32位和64位安装包

    - **库兼容性**:某些第三方库可能仅支持32位或64位,需确保所选JDK与库兼容。 3. **JDK 8的新特性** - **Lambda表达式**:引入函数式编程概念,简化匿名内部类,使代码更加简洁。 - **Stream API**:提供了处理...

    jre7-32位和jre7-64位

    1. **32位与64位JRE的区别** - **32位JRE**:适用于32位操作系统,如Windows XP、Windows 7的32位版本。它可以处理最多4GB的内存,并且只能运行32位的Java应用程序。 - **64位JRE**:适用于64位操作系统,如...

    jdk1.8 32位和64位免安装包

    2. **32位与64位的区别**: - **32位JDK**:适用于32位操作系统,如Windows XP、Windows 7 32位等。它只能访问最大4GB的内存,并且在处理大数据量时可能受限。 - **64位JDK**:适用于64位操作系统,如Windows 7 64...

    jdic.dll(32位、64位)

    **32位与64位的区别** 32位和64位的jdic.dll版本是为了适应不同架构的操作系统。32位版本适用于32位操作系统,而64位版本则适用于64位操作系统。两者不能互换使用,因为它们的数据结构和指令集是不同的。在64位系统...

Global site tag (gtag.js) - Google Analytics