我的 Linux 机器上有 16GB RAM,并使用 -Xmx4096m 参数将最大 Java 堆内存设置为 4GB。但是当我开始我的过程时出现以下错误。
最大堆大小无效:-Xmx4096m 指定的大小超过了最大可表示大小。无法创建Java虚拟机。
当我将值设置为 2048m 时它工作正常。
我需要更改任何其他配置参数以增加堆大小吗?
提前致谢!
我的 Linux 机器上有 16GB RAM,并使用 -Xmx4096m 参数将最大 Java 堆内存设置为 4GB。但是当我开始我的过程时出现以下错误。
最大堆大小无效:-Xmx4096m 指定的大小超过了最大可表示大小。无法创建Java虚拟机。
当我将值设置为 2048m 时它工作正常。
我需要更改任何其他配置参数以增加堆大小吗?
提前致谢!
它不仅与您拥有多少内存有关
在 32 位机器上,最大可用堆为 1628MB 在 64 位机器上,最大可用堆为 2^64(理论上),但有限制
您使用的是什么操作系统?查看Oracle 热点常见问题解答。请注意以下部分:
为什么我不能使用 32 位 JVM 获得更大的堆?
如果您使用的是 32 位系统,请将其降低到 1.6G。对于 64 位系统,请查看提供的链接中支持的系统列表。
试试 -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 MiB)
已使用:246496784 (235.07765197753906 MiB)
可用内存:13025776 (12.422348022460938 MiB)
我可能不会增加这个我认为是InitialHeapSize的“最大内存”
我试图改变它
控制面板 > java 控制面板 > java (tab) > view (button) > RuntimeParameter (block) > -Xms2000M
,当然出去后我点击申请,但什么也没发生......仍然耗尽我的记忆;'[