0

我们有带有 2048 RAM 的 Windows 电脑。
我们尝试为 JBoss 使用下一个内存设置:
-Xms256M -Xmx768M -XX:MaxPermSize=256M

但它无法启动:

VM 初始化期间发生错误无法为对象堆保留足够的空间无法创建 Java 虚拟机。

仅当我们将 -Xmx768M 更改为 -Xmx512M 时,JBoss 才会启动。

可能是什么问题?

更新: 现在我们使用下一个设置
-Xms512M -Xmx768M -XX:MaxPermSize=156M

4

5 回答 5

4

http://javahowto.blogspot.in/2006/06/6-common-errors-in-setting-java-heap.html

该错误似乎是说机器的虚拟内存大小小于我们通过“-Xms1303m -Xmx1303m”定义的最大堆大小。我已将其更改为“-Xms256m -Xmx512m”,它开始在我的本地 Windows 框中工作。

于 2012-11-22T07:30:36.217 回答
0

有趣的。将最大内存设置为 513M 会发生什么?

如果失败了,那可能是我很久没见过的问题了。我使用的一个古老的 COBOL 编译器拒绝在具有 640K RAM 的 PC 上工作,因为它们使用有符号数检查来确定是否有足够的内存。

而在那个世界中,640K实际上设置了高位,因此是一个负数,所以检查总是失败。

我很难相信当今世界会出现这种情况,但它可能值得一看。

如果它在 513M 时没有失败,那么可能只是您试图分配太多内存。重要的不一定是物理内存,地址空间可能是问题所在,但在 32 位 Windows 中,您也应该拥有 2G(至少)的内存。

显示您的设置后,您将 1G 仅用于 permgen 和 heap。尝试调整这些直到它起作用并发布您拥有的数字。

于 2009-12-22T11:26:23.050 回答
0

也许你可以重新启动你的电脑,然后再试一次。您分配的内存不能超过您的总物理内存。

于 2009-12-30T17:10:55.400 回答
0

有两种可能的原因:

  • JVM 在地址空间中找不到 768 MiB 的连续区域或
  • RAM 和页面文件上的可用区域总大小小于 1 GiB。

(由于 GC 实现,JVM 使用-Xmx并在启动时检查它们)-XX:MaxPermSize

你可以-Xmx768m -XX:MaxPermSize156m,后者是值得怀疑的。

如果是这样,则可以通过释放 RAM(例如,停止未使用的服务)或扩展页面文件来解决问题。

于 2009-12-22T14:33:24.073 回答
0

-Xms256M -Xmx768M -XX:MaxPermSize=256M应该只尝试在初始化时最多获取 512M 加上 JVM 进程本身的大约 100M。你的机器上有那么多空闲内存吗?我们总是在 4G 的机器上运行 jboss,因为数据库也占用了相当多的空间。

这是一个技巧,您可以使用它来找到您可以设置的最大金额。你可以简单地运行

java -version -Xms256M -Xmx768M -XX:MaxPermSize=256M

然后增加/减少值,直到找到 JVM 允许您设置的最大值。

顺便说一句,在 4G 32 位 windows 机器上,我们通常设置 -Xms768M -Xmx1300M -XX:MaxPermSize=256M

于 2009-12-30T17:23:19.570 回答