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

Java:什么决定了Linux机器中可能的最大最大堆大小

沈成天
2023-03-14
问题内容

我有两台linux机器(都是VM),一台有12GB内存,另一台有8GB内存。

我试图在两台机器上启动相同的Java程序,并且最大可能的最大堆大小(使用-Xmx标志)。以下是我得到的结果。

  • 12GB机器:9460MB
  • 8GB机器:4790MB

如果我指定的最大堆大小超出了限制,我将得到以下错误。

Error occurred during initialization of VM
Could not allocate metaspace: 1073741824 bytes

我检查了两个系统中的可用内存(使用free命令),然后得到关注。

  • 12GB机器:大约3GB可用空间。
  • 8GB机器:大约4GB可用空间。

我的问题是,什么决定了可以启动Java程序的最大最大堆大小,这不会导致上述错误?(1073741824当程序出现上述错误时,系统有足够的内存来分配内存字节)


问题答案:

我用ravindra给出的线索做了一些实验,发现最大最大堆大小与系统中可用的总虚拟内存有直接关系。

可以通过以下方式找到系统中的总虚拟内存(以KB为单位):

ulimit-v

总虚拟内存可以通过以下方式更改:

ulimit -v <new amount in KB>

可能的最大最大堆大小比虚拟内存少大约2GB。如果使用来指定无限的虚拟内存ulimit -v unlimited,则可以为最大堆大小指定任何较大的值。



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

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

  • 我正在尝试使用画布元素,但高度不能超过像素。如果我尝试使用像素,我会在IE11中得到。这在Chrome中工作正常。画布用于PDF生成,我真的没有时间将生成移动到服务器。 我在谷歌上搜索了一下,看起来大小可能会因平台和浏览器的不同而有所不同。 是浏览器分配的内存和内存设置决定了这一点吗? 编辑:我在这里找到了一些信息: 看起来我可以有两倍的尺寸。也许这只是为了IE9。

  • 有很多关于堆大小的帖子和站点,但是没有一个提到在调用JVM时如何找出我可以保留的最大可能堆大小。 任务是用最大可用堆大小xmx=max动态启动我的jvm(这里不需要讨论这个任务的对象!)。 我们可以考虑读取当前可用或空闲的内存,并将该大小用于xms和XMX。但这不起作用。 调用Java程序时: Java-XMS1536M-XMX1536M myApp 导致: 选择您选中的应用程序大约需要的堆。并在

  • 我刚刚在VServer和JRE Build1.7.0_67-B01上安装了Ubuntu 64bit。如果我想运行一个java jar文件,它说 无效的最大堆大小:-XMX错误:无法创建Java虚拟机。错误:发生致命异常。程序将退出。 我试了1M,256M,1024M,2G和4G的-XMX,都不起作用。是不是有我不知道的隐藏设定? 下面是我使用的命令:

  • 如果我逃跑 在铬33上,我得到 为什么?