当前位置: 首页 > 知识库问答 >
问题:

Java 32位Xmx vs Java 64位Xmx

邵星光
2023-03-14

我真的对此感到困惑。

Xmx根据java文档,是允许的最大堆大小。
Xms是所需的最小java堆大小,在JVM启动时分配。

在32位JVM(4GB ram)上,java-xmx1536m HelloWorld会出现无法分配足够内存的错误。
在64位JVM(4GB ram)上,java-xmx20g HelloWorld可以正常工作。但我甚至没有分配那么多的虚拟或物理内存。

因此,我得出结论:Java 32位在JVM启动时分配了1536M,而Java 64位没有。

为什么?一个简单的Hello世界应该不需要1536M才能运行。我只是指定1536M是最大值,而不是需要它。

有人解释吗?

共有1个答案

於乐
2023-03-14

分配内存和分配地址空间是有区别的。Oracle JVM在启动时分配地址空间,以确保堆是连续的。这允许在堆中使用某些优化。

如果分配失败,那么Java就不会启动...如你所见。它不一定使用那么多内存,但它预先分配了所需的地址空间。由于您正在传递-xmx1536m,它表示ok,我需要分配它,以备您需要...而且,由于它必须是连续的,所以它是预先做的,这样它就可以保证它(或者尝试失败)。

这种行为在32位和64位JVM上都是相同的。您所看到的是32位进程的每个进程2GB地址空间限制(至少在Windows上这是限制--在其他平台上可能稍大一些),导致这种分配在32位上失败,而64位没有任何问题,因为它有更大的地址空间。但是,你说,1536M不到2GB,我应该很好吧?不完全是--堆不是唯一分配在地址空间中的东西,DLL和其他东西也分配在地址空间中...所以不幸的是,在32位的最大2GB中获得一个连续的1536M块是非常不可能的。我见过在碎片特别严重的32位进程上1000M以下的值会失败,通常在32位上可以指定的最大堆是1200-1300M。

在现代操作系统上,ASLR(地址空间布局随机化)使得32位进程地址空间的碎片化更加严重。出于安全原因,它有意将DLL加载到随机地址中...从而使您更不可能在32位中获得一个大的、连续的堆。

在64位中,地址空间非常大,碎片不再是问题,可以毫无问题地分配巨型堆。即使在32位上有4GB的RAM,每个进程2GB的地址空间限制(至少在Windows上)通常意味着最大堆通常只有1300M左右。

 类似资料:
  • 我目前正在学习位操作,我的任务是做一个左旋转的4位整数。 我的4位左旋转代码是 我想做一个4位循环移位,以保持作为一个4位后旋转,但似乎不能理解它是如何工作的。 例如:10(1010)左旋转1位后给出5(0101),但它给出的值是21,比我的4位多。 任何能让我理解这个问题的帮助都将不胜感激!

  • 问题内容: 我已经使用Java一段时间了,而我典型的设置新开发机的习惯要求从Oracle站点下载并安装最新的JDK。 今天这引发了一个不寻常的问题, 回想起来,我已经安装了之前的两个版本,并且很高兴将普通的工具链插入(Eclipse)。在我的日常编程中,我不会回想起曾经因为使用64位JRE(或为此目的而针对64位JRE)而不得不以其他方式进行更改或思考的事情。 根据我对64位和32位的理解- 确实

  • 我必须编写一个函数,对y位置的位进行左循环移位。例如,如果我将:01011000和2作为y,则函数必须返回011000001。 我已经尝试使用但它似乎是无用的。

  • 问题内容: 我的电脑正在使用Windows 7 64位。但是将要部署我的jsp Web应用程序的服务器是32位。 我需要在PC上安装32位JDK / JRE才能进行开发吗?我正在使用Eclipse。 非常感谢你。 问题答案: 您绝对不需要安装32位JRE即可进行开发。您构建的Java代码不会跟踪您的64位。(我假设您没有使用JNI,这会使事情变得有些复杂。) 不过,您 可能 需要安装32位JRE进

  • 问题内容: 我正在创建一个非常简单的应用程序,该应用程序可以读取和显示文本文件并进行搜索。 我问自己是否有兴趣向用户提出32位和64位版本。 区别仅在于使用64位版本访问更多的内存堆大小,还是还有其他兴趣? 32位编译程序是否可以在64位JVM上运行(我认为是) 问题答案: 任何 程序的32位和64位版本之间的唯一区别是机器字的大小,可寻址内存的数量以及所使用的操作系统ABI。对于Java,语言规

  • 操作步骤: ①在"定位监控"模块,开启"实时监控"开关。 ②点击"实时位置",进入实时位置。 ③协作成员在手机端登录亿景智图APP,并允许访问位置服务,进入协作地图。协作成员在APP登录后实时定位头像由灰色变亮。 ④协作成员在APP登录后实时定位头像由灰色变亮。 提示: ●项目实施过程中,开启位置监控功能,管理人员(地图管理员、成员)可以在地图上实时查看成员的具体位置,方便工作协调和任务分派。 ●