当前位置: 首页 > 面试题库 >

如果指定最大堆大小大于可用RAM,会发生什么情况?

夏振国
2023-03-14
问题内容

在采访中问。如果指定最大堆大小(Xmx)大于可用RAM,会发生什么情况?我还想知道,如果指定最小堆大小(Xms)大于可用RAM,会发生什么情况?


问题答案:

找出答案的最简单方法是尝试并查看。

编辑:
实际上至少有两个答案。如前所述,可能是在64位系统上,您的应用程序的内存使用量可能会越来越大,并且开始崩溃。在32位系统上,情况有所不同,因为os无法为您提供那么多的堆空间。例如,如果我在32位Windows
XP的Windows XP上使用命令行选项-Xmx2000m运行应用程序,则该应用程序将死,并显示类似以下内容的消息

无效的最大堆大小:-Xmx2000m

指定的大小超过了最大可表示大小。

无法创建Java虚拟机。

在具有32位Java的Linux中,使用-Xmx3000m可获得以下信息:

无法创建Java虚拟机。

VM初始化期间发生错误

无法为对象堆保留足够的空间

在具有32位Java的Linux中,使用-Xmx6000m可获得以下内容

无效的最大堆大小:-Xmx6000m

指定的大小超过了最大可表示大小。

无法创建Java虚拟机。

尝试使用64位Java进行操作,JVM确实允许您分配比物理RAM更多的内存,尽管如果您请求的内存量非常大,JVM将再次失败并显示错误。



 类似资料:
  • 假设我有32 GB的RAM,我通过指定-xmx2048m为我的java进程分配了2GB。但实际上我的进程通常只消耗1GB的堆。那么分配的剩余1GB内存会发生什么呢?剩余的RAM总量是30 GB还是31 GB?

  • 问题内容: 我有两台linux机器(都是VM),一台有12GB内存,另一台有8GB内存。 我试图在两台机器上启动相同的Java程序,并且最大可能的最大堆大小(使用-Xmx标志)。以下是我得到的结果。 12GB机器:9460MB 8GB机器:4790MB 如果我指定的最大堆大小超出了限制,我将得到以下错误。 我检查了两个系统中的可用内存(使用命令),然后得到关注。 12GB机器:大约3GB可用空间。

  • 我是Java的初学者,刚开始使用Intellij作为我的IDE。 当我使用它时,有时会延迟。 我更改了我的 xms 和 xmx 以获得更大的堆大小(xms = 1024,xmx = 2048),但它抛出了一个错误。 所以,我把它回滚了。 错误消息是这样的:“初始堆大小设置为大于最大堆大小的值”。 有什么问题? 如果可能,如何增加最大堆大小? 我用的是笔记本电脑,它有8GB内存。x64Intelli

  • 问题内容: 这是 不是 增加Java的堆的最大尺寸的虚拟机启动后。技术原因是什么?垃圾回收算法是否取决于要使用固定数量的内存?还是出于安全原因,通过消耗所有可用内存来防止Java应用程序从DOS的系统中移至其他应用程序? 问题答案: 最后我知道在Sun的JVM中,必须在连续的地址空间中分配整个堆。我想对于大堆值,很难在启动后将其添加到您的地址空间中,同时又要确保它保持连续。您可能需要在启动时获取它

  • 我正在使用IntelliJ 2020.1 Ultimate,并且有一个JBoss 7.0.2服务器,我想从IntelliJ运行。 我将其添加为配置: 但是当我尝试启动服务器时,我收到以下错误: IDEA.app/Contents/plugins/Kotlin/lib/jps/kotlin-jps-plugin.jar:/Applications/IntelliJ IDEA.app/Contents

  • 我有两台Linux机器(都是虚拟机),一台有12GB内存,另一台有8GB内存。 我尝试在两台机器上启动相同的java程序,并尽可能地使用最大堆大小(使用-Xmx标志)。以下是我得到的结果。 12GB 机器容量: 9460MB 8GB 机器容量: 4790MB 如果我指定的最大堆大小超出了上述限制,我会得到以下错误。 我检查了两个系统中的空闲内存(使用< code>free命令),得到如下结果。 <