32位Java与64位Java之间的区别

在计算机体系结构中,使用64位计算的处理器的数据路径宽度,整数大小和内存地址宽度为64位(八个八位位组/字节)。同样,64位CPU和ALU架构是基于该大小的寄存器,地址总线或数据总线的架构。从软件的角度来看,64位计算意味着使用具有64位虚拟内存地址的代码。同样,出于所有上述目的,32位计算,CPU或32位编程使用32位(四个八位位组/字节)。

如果转到Java下载页面,它将列出各种安装软件包,其中提到了适用于Linux或Windows等各种平台的32位软件包或64位软件包。很多时候,我们担心哪些软件包可以在系统中下载并安装,以使我们的Java代码正常运行?在这篇文章中,我将尝试阐明这些不同的术语,并且还将尝试回答一些明显的问题。

讨论要点

详细了解32位体系结构
64位体系结构有何不同?
您应该在32位/ 64位计算机上安装哪个版本的Java?
使用32位Java编译器生成的.class文件可以在64位Java上使用吗?
在32位计算机和64位计算机上,可分配给java的最大RAM数量是多少?

您已经阅读了64位和32位计算/体系结构之间的基本区别。现在,让我们加深理解,深入到位和字节。

详细了解32位架构

您可能已经知道,在任何32位操作系统中,RAM限制为4096 MB(4 GB)。这很简单,因为32位值的大小将不允许在内存中添加更多引用。

32 = 4,294,967,296,即大约4.29 GB

因此,理论上,在32位系统中,每个进程最多可以分配4GB的内存。在Windows上打破这一点的是如何处理进程地址空间。Windows将进程地址空间减少了一半。其中一半保留给操作系统(用户进程无法使用),另一半保留给用户。盒子中有多少RAM无关紧要,一个32位进程只能使用2GB RAM。更糟糕的是,该地址空间必须是连续的,因此在实践中,Windows计算机上通常只剩下1.5-1.8GB的堆空间

精通技术的读者可能知道,现代芯片支持PAE,这是一种处理器技术,可使操作系统使用更多的内存(最大64 GB),但它也需要大多数应用程序没有或不一定需要的特殊应用程序支持。

Windows的4 GB限制至少也是许可的因素。32位Windows的家庭版本在技术上能够支持PAE,但出于许可和驱动程序兼容性方面的考虑,硬限制为4 GB。我指出“ 驱动程序兼容性的原因 ”,因为一些使用本机文件的特定应用程序(例如防病毒软件)是专门为32位/ 64位计算机构建的,而本机文件在其他计算机上不兼容

要记住的另一件事是,您的BIOS和主板中的其他设备芯片(例如视频卡)也占用相同的4 GB空间中的一些内存,因此可供您的应用程序使用的实际内存进一步减少到仅约1.5 GB。

64位体系结构有何不同?

虽然32位信息只能访问4 GB的RAM ,但至少在理论上,一台64位计算机可以访问172亿GB的系统内存。因此,它必须消除系统中所有内存消耗的障碍,对吗?但事实并非如此。

Windows 64位家庭版仍然限制为16 GB RAM(全部是出于许可原因),但是由于各种兼容性问题,专业版和旗舰版目前最多可以使用192 GB RAM。

RAM的每个进程的限制也大大增加了-在64位Windows上,而不是2 GB的限制,每个应用程序可以访问高达8 TB的虚拟内存,而无需任何特殊配置除非它必须存在于系统中)。当考虑可能需要使用大量RAM的视频编辑或虚拟机等应用程序时,这是选择下一台计算机的重要因素。

因此,现在我们对32位计算机和64位计算机有了很好的了解。让我们关注与Java主要相关的东西。

您应该在32位/ 64位计算机上安装哪个版本的Java?

严格来说,在32位CPU架构计算机上,应该安装32位Java / JRE。另一方面,在64位CPU架构计算机上,您可以自由选择在32位Java / JRE和64位Java / JRE之间。两者都可以正常工作。实际上,在64位计算机上,JRE版本的决定取决于其他因素,例如在高负载情况下运行应用程序所需的最大内存。

请注意,并非免费提供高可用性内存。它确实有运行时成本,例如

1)与32位相比,在64位上需要更多30-50%的堆。为什么?主要是由于64位体系结构中的内存布局。首先–在64位JVM上,对象标头是12个字节。其次,对象引用可以是4个字节,也可以是8个字节,具体取决于JVM标志和堆的大小。与32位标头上的8个字节和引用标本上的4个字节相比,这无疑增加了一些开销。

2)更长的垃圾收集暂停时间。建立更多的堆意味着GC在清除未使用的对象时还有更多工作要做。在现实生活中,这意味着在构建大于12-16GB的堆时,您必须格外小心。如果不进行微调和测量,则很容易在几分钟内引入完整的GC暂停,这可能会导致显示停止。

使用32位Java编译器生成的.class文件可以在64位Java上使用吗?

绝对没错。Java字节码独立于32位或64位系统。这就是为什么据说编译的Java代码应在“ 任何 ”系统上可执行的原因。请记住,因为虚拟机是打包在捆绑包中的一些本机文件,所以它只是为特殊的系统体系结构而编译的,而本机文件从不独立于平台。

如果是这样,那么32位应用程序如何在64位系统上运行?答案是64位系统包括称为 WoW64的兼容层,该层实际上根据需要执行的线程在32位和64位模式之间来回切换处理器。使32位软件即使在64位环境中也能平稳运行。

在32位计算机和64位计算机上,可分配给java的最大RAM数量是多少?

我们已经在本文的前面的讨论中了解到两个版本都允许的限制。在64位系统上,理论上讲,今天可用的任何配置(172亿十亿GB内存)的限制都非常高。供应商仍然出于各种目的施加限制,主要包括许可和与其他本机应用程序的兼容性。

同样,在32位计算机上,限制为4 GB,出于上述原因,用户应用程序实际上仅可使用约1.5 GB。

您可以使用32位窗口来减少内核空间并增加用户空间,这是一个技巧。您可以在boot.ini中使用/ 3GB参数。但是,要实际利用此机会,必须使用/ LARGEADDRESSAWARE开关来编译/链接JVM 。

不幸的是,至少对于Hotspot JVM并非如此。直到最新的JDK版本,才使用此选项编译JVM。如果您在2006年后版本的jRockit上运行,则更加幸运。在这种情况下,您可以享受高达2.8-2.9 GB的堆大小。

这就是本主题的全部内容。如果不清楚,请发表评论。或者你只是不同意我。

saigon has written 1440 articles

Leave a Reply