我的Linux机器上有16GB RAM,并使用-Xmx4096m参数将最大Java堆内存设置为4GB。但是当我开始我的过程时,我收到以下错误。
无效的最大堆大小:-Xmx4096m指定的大小超过 最大可表示的大小。无法创建Java虚拟机。
当我将值设置为2048m时,它工作正常。
是否需要更改任何其他配置参数以增加堆大小?
提前致谢!
答案 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
当我尝试更改-Xmx4G并显示时,显示MaxHeapSize = 0 ...
我的问题 是使用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>