【问题标题】:Not able to increase java heap size无法增加 java 堆大小
【发布时间】:2012-09-20 05:04:23
【问题描述】:

我的 Linux 机器上有 16GB RAM,并使用 -Xmx4096m 参数将最大 Java 堆内存设置为 4GB。但是当我开始我的过程时出现以下错误。

最大堆大小无效:-Xmx4096m 指定大小超过 最大可表示尺寸。无法创建 Java 虚拟机。

当我将值设置为 2048m 时它工作正常。

我需要更改任何其他配置参数以增加堆大小吗?

提前致谢!

【问题讨论】:

  • 你运行 64bit linux 还是 32bit?
  • 你的机器架构是什么?在 32 位机器上,最大可用堆大小为 1628MB?
  • 感谢大家的回复。我正在运行 64 位 Linux。它适用于 2048MB 的堆大小。
  • 如果您的 JVM 是 32 位或 64 位,您仍然没有指定。常见问题解答引用:“在运行 32 位 VM 的 64 位操作系统上,最大堆大小可能更高,在许多 Solaris 系统上接近 4G。” oracle.com/technetwork/java/… $ java -version 能够告诉你你正在使用哪个 JVM。
  • 我使用 32 位 JVM。会不会是个问题。可能这解释了这种行为。

标签: java heap-memory


【解决方案1】:

这不仅仅是关于你有多少内存

在 32 位机器上,最大可用堆为 1628MB 在 64 位机器上,最大可用堆为 2^64(理论上),但有限制

【讨论】:

    【解决方案2】:

    您使用的是什么操作系统? 看看Oracle Hotspot FAQ。请注意以下部分:

    为什么我不能使用 32 位 JVM 获得更大的堆?

    如果您使用的是 32 位系统,请将其降低到 1.6G。对于 64 位系统,请查看提供的链接中支持的系统列表。

    【讨论】:

      【解决方案3】:

      试试 -Xmx4066M 比4G少了一点

      键入命令提示符 (cmd) 后

      java -XX:+PrintFlagsFinal -version | findstr /i "HeapSize PermSize ThreadStackSize"
      

      显示以下结果 为了从 bit's 到 Mb 你必须 除以 1024^2=1'048'576 bits/mb

      • uintx HeapSizePerGCThread = 87241520 位(83,1999...MiB)
      • uintx InitialHeapSize = 268435456 位 (256 MiB)
      • uintx LargePageHeapSizeThreshold = 134217728 位 (128 MiB)
      • uintx MaxHeapSize = 4263510016 位 (4066 MiB)

      当我尝试更改 -Xmx4G 并显示时,这显示给我 MaxHeapSize =0...

      但是当我使用 -XmX4066M 时,它对我有用。

      我的问题是 InitalHeapSize 我尝试更改 -Xms2G 或 -Xms2000M 但它对我不起作用或每次都会刷新...

      在我创建一个新项目之后

      public class MaxMemory {
      
      /**
       * @param args the command line arguments
       */
      public static void main(String[] args) {
          Runtime rt = Runtime.getRuntime();
          long totalMem = rt.totalMemory();
          long maxMem = rt.maxMemory();
          long freeMem = rt.freeMemory();
          long usedMem= totalMem-freeMem;
          double megs = 1048576.0;
      
          System.out.println ("Max Memory:   " + maxMem + " (" + (maxMem/megs) + " MiB)");
          System.out.println ("Total Memory: " + totalMem + " (" + (totalMem/megs) + " MiB)");
          System.out.println ("Used:  " + usedMem + " (" + (usedMem/megs) + " MiB)");
          System.out.println ("Free Memory:  " + freeMem + " (" + (freeMem/megs) + " MiB)");  
      
      }
      

      它在我的一个程序中引发了以下结果:

      最大内存:259522560 (247.5 MiB)

      总内存:259522560 (247.5 MiB)

      已使用:246496784 (235.07765197753906 MiB)

      可用内存:13025776 (12.422348022460938 MiB)

      我可能不会增加我认为是 InitialHeapSize

      "Max Memory"

      我已经尝试过改变它

      控制面板 > java 控制面板 > java (tab) > view (button) > 运行时参数(块)> -Xms2000M

      ,当然出门后我点击申请,但是什么也没发生……我的记忆力还是不够;'[

      【讨论】:

        猜你喜欢
        • 2012-12-07
        • 2013-01-26
        • 2012-07-14
        • 2019-03-05
        • 2010-12-06
        • 2010-10-27
        • 2022-11-21
        • 1970-01-01
        相关资源
        最近更新 更多