JVM中32位和64位有什么区别呢?

戚薇 Java经验 发布时间:2023-07-01 16:56:27 阅读数:16755 1
下文笔者讲述JVM中32位和64位的区别说明
学习完本篇之后,你将彻底了解32位和64位之间的区别,如下所示

可以说,在日常开发中JVM32位和64位程序没有区别

32位和64位Java虚拟机之间有一些小小区别,如下所示:

  • 64位JVM中
    可设置堆大小比32位JVM更多的内存

    在32位JVM中,理论上最大内存限制是4GB,而64位则高得多。
  • 64位JVM有大堆Java应用用处非常大,
    如:
    有一个内存使用超过100GB内存的应用
  • 因为OOP(普通对象指针)的大小从32位增加到了64位,同一个Java应用程序在64位JVM中使用的内存会比在32位JVM中使用的多
    当使用JVM选项-XXCompressedOOP
  • 在64位JVM架构中,对象头的大小是12字节
    而不是32位JVM中的8字节
    另一个变化是内部引用的大小
    现在可以达到8字节
    32位JVM只能达到4字节
  • 32位和64位JVM的安装程序是分开的
  • 客户端JVM只适用于32位JVM,不适用64位

上面笔者描述是JVM64优点,但是64位JVM的性能比32位JVM慢

因为系统中的每个本机指针占用八个字节,而不是四个字节。这些额外数据的加载增加了内存的使用,这导致执行速度稍慢
Java虚拟机获得了一些额外的寄存器,它可以用来创建更有效的本地指令序列。当比较32位和64位的执行速度时,这些额外的寄存器提高了性能,以至于通常没有任何性能损失。

32位JVM迁移到64位JVM时注意事项

  • 垃圾收集器的暂停时间
  • 本地库

因素1:GC暂停时间

从32位JVM转换到64位JVM的主要动机是为增加堆的大小(即-Xmx)
当增加堆的大小时,GC暂停时间将自动增加,因为内存中没有更多的垃圾需要清除。在执行迁移之前,必须进行适当的GC调整;否则应用程序可能会经历几秒钟到几分钟的停顿。为了给新增加的堆的大小提出正确的GC设置,可以使用GCeasy等工具。

因素2:本地库

当应用程序通过Java Native Interface(JNI)访问本地库,也需要升级本地库,因为只有32位的本地库可以被32位的JVM使用。同样地,64位的JVM只能使用64位的本地库。

注意事项:使用32位或64位Java虚拟机场景

  • 应用程序的堆大小(即-Xmx)小于2GB,使用一个32位的JVM。(< 2GB 内存)
  • 当应用程序需要超过2GB的内存,一定要使用64位JVM(>2GB内存)

JVM32和jVM64的区别,如下表所示

32位JVM 64位JVM
在32位JVM中,可以为堆的大小提供比64位JVM更少的内存。 在64位JVM中,可以为堆大小指定比32位JVM更多的内存。
32位的最大内存限制对4G连接很有用。 它对具有大堆的java应用程序特别有用。
它有自己的安装程序。 它有一个不同于32位JVM的安装程序。
头部大小为8字节。 头部大小为12字节。
内部引用的大小为4字节。 内部引用的大小为8字节。
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaJingYan/202307/16882018336946.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者