JVM中32位和64位有什么区别呢?
下文笔者讲述JVM中32位和64位的区别说明
学习完本篇之后,你将彻底了解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字节。 |
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。