【问题标题】:Why does Java try to reserve max space from heap为什么Java尝试从堆中保留最大空间
【发布时间】:2018-03-31 09:52:11
【问题描述】:

当我尝试启动 java 时,我设置标志 Xms 和 Xmx 来定义堆中的最小和最大内存

 C:\ProgramData\Oracle\Java\javapath\java.exe -Xms200M -Xmx1536M

结果,Java 询问我没有足够的可用空间

Error occurred during initialization of VM
Could not reserve enough space for 1572864KB object heap

但是,如果我设置,例如 -Xmx756,它就可以正常工作!

那么,为什么 Java 不能预留内存呢?我有 16GB 的 RAM,但只有不到一半的内存在使用。 为什么Java尝试保留最大数量的内存,因为我设置了从200到1536的范围?

【问题讨论】:

  • 我不明白,你宁愿 Java 在运行你的代码几个小时后告诉你没有足够的可用空间吗?

标签: java heap-memory


【解决方案1】:

您提到的“最大”内存量需要可用(即使它在开始时没有保留 - 您可以在 jvisualvm 中看到)。由于某种原因,您的大部分物理内存都不可用。最常见的原因是:

您可能正在运行 32 位版本的 Java。改用 64 位版本,这样可以预留更多内存。

【讨论】:

  • 这是解决问题的方法。但是为什么在所描述的情况下会出现问题?
  • @Dmitrii 我的回答是否足以回答您的问题?
猜你喜欢
  • 2014-03-16
  • 2015-07-15
  • 2015-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-21
  • 1970-01-01
  • 1970-01-01
  • 2019-01-02
相关资源
最近更新 更多