【问题标题】:Avoiding Initial Memory Heap Size Error避免初始内存堆大小错误
【发布时间】:2010-10-28 21:13:20
【问题描述】:

我使用以下命令运行 Java 代码:

$ java -Xms4G -Xmx4G myjavacode

我的 cpu 的 RAM 容量是 6GB。

但是它总是无法执行给我这个 错误信息:

Invalid initial heap size: -Xms5G
The specified size exceeds the maximum representable size.
Could not create the Java virtual machine

有什么方法可以设置 Java 选项以便我们可以 执行代码?

【问题讨论】:

  • 你使用的是哪个 JVM?
  • @roland: jdk1.6.0_14/bin/java
  • 您确定您运行的是 64 位 JVM 吗? 32 位无法处理这么多内存。
  • @diciu:如何检查我是否使用 32bit/64bit JVM?我的 linux 机器是 64 位的。
  • JVM 通常有一个“-d64”参数,指示它尽可能以 64 位启动。只需在命令行上运行 JVM,它就会列出所有可能的参数。

标签: java memory-management


【解决方案1】:

您已超出 JVM 的最大堆大小。这取决于 JVM 和操作系统。在大多数 32 位系统中,最大值将为 2Gb,而与可用的物理内存无关。

【讨论】:

  • 在 Windows 32 位上,限制接近 1.3 GB
  • 我在具有 16GB RAM(14GB 免费)的系统上收到错误 Invalid initial heap size: -Xms256m -Xmx512m
【解决方案2】:

默认情况下,Java 将以 32 位模式运行。请务必为其提供 -d64 选项以使其进入 64 位模式。一旦进入 64 位模式,分配 6GB JVM 应该不会有任何问题。

【讨论】:

  • 你的意思是64位的JVM也默认运行在32位模式下?
  • 我的问题在 Solaris Sparc 64bit 上使用 Java(TM) SE 运行时环境(内部版本 1.6.0_21-b06)java 得到了解决。谢谢
  • 这没有意义,但是是的,在 AWS 4.14.72-68.55.amzn1.x86_64 amazon linux 上似乎也是如此,其中 64 位 openjdk 1.8 是默认设置。令人困惑的是,如果您像-Xms4g -Xmx16g -d64 一样使用 d64,问题甚至不会消失。它只能按以下顺序工作:-d64 -Xms4g -Xmx16g
【解决方案3】:

实际上,32 位系统的最大内存大小可能会有所不同,最高可达 4 GB,但 2 GB 是一个常见值。通常可以重新链接内核以将其增加到 3 或 3.5 GB。当然,问题在于您没有地址空间来映射更多内存。你试过 64 位机器吗?

另外,请记住在执行此操作之前将 ulimit 设置得更高。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-04
    • 2010-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-04
    • 1970-01-01
    相关资源
    最近更新 更多