无法增加Java堆大小

时间:2012-09-28 10:02:50

标签: java heap-memory

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

  

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

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

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

提前致谢!

3 个答案:

答案 0 :(得分:2)

它不仅仅是你有多少RAM

在32位机器上

最大可用堆是1628MB 在64位机器上,最大可用堆数是2 ^ 64(理论上),但存在局限性

答案 1 :(得分:1)

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

  

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

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

答案 2 :(得分:0)

尝试-Xmx4066M 它有点不到4G

键入命令提示符(cmd)后

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

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

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

当我尝试更改-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)

     

使用:246496784(235.07765197753906 MiB)

     

免费记忆:13025776(12.422348022460938 MiB)

我可能不会增加 “Max Memory” 我认为 InitialHeapSize

我试图在

中更改它
  

控制面板> java控制面板> java(tab)>视图(按钮)>   RuntimeParameter(块)> -Xms2000M

,当然我出门后点击申请但没有发生任何事情......仍然没有记忆;'[/ p>