除非开发一个对性能要求很高的应用程序,否则人们不需要知道其中的区别。32位和64位JVM之间的细微差别对你的应用程序来说没有什么影响。

现在列出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,你就可以摆脱它,它告诉JVM使用32位指针。
  • 下一个主要的变化是,在64位JVM架构中,对象头的大小,现在是12字节,而不是32位JVM中的8字节。另一个变化是内部引用的大小,现在可以达到8字节,而32位JVM只能达到4字节。
  • 32位和64位JVM的安装程序是分开的。
  • 客户端JVM只适用于32位JVM,不适用64位。

如上所述,已经看到了这种差异,但请记住一个说明,64位JVM的性能怎么会比32位JVM慢呢?

这是因为系统中的每个本机指针占用了八个字节,而不是四个字节。这些额外数据的加载增加了内存的使用,这导致执行速度稍慢,这取决于你的Java程序执行过程中加载了多少个指针。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内存)

现在让我们以表格的形式来看看这些差异,具体如下:

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

Java中32位和64位JVM的区别

欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果。
转载请注明:文章转载自 有区别网 [http://www.vsdiffer.com]
本文标题:Java中32位和64位JVM的区别
本文链接:https://www.vsdiffer.com/vs/difference-between-32-bit-and-64-bit-jvm-in-java.html
免责声明:以上内容仅代表 个人看法、理解、学习笔记、总结和研究收藏。不保证其正确性,因使用而带来的风险与本站无关!如本网站内容冒犯了您的权益,请联系站长,邮箱: ,我们核实并会尽快处理。