java EE应用程序可以使用多于MAX堆的内存

时间:2012-08-13 12:47:22

标签: java heap

我在servlet中检查了以下代码:

int mb = 1024 * 1024;
Runtime runtime = Runtime.getRuntime();
out.write("Used Memory:" + (runtime.totalMemory() - runtime.freeMemory()) / mb);
out.write("Free Memory:" + runtime.freeMemory() / mb);
out.write("Total Memory:" + runtime.totalMemory() / mb);
out.write("Max Memory:" + runtime.maxMemory() / mb);

输出是:

Used Memory:10
Free Memory:46
Total Memory:57
Max Memory:57

我希望我的应用程序不要使用超过64 MB的堆?我想知道 - 我的应用程序有什么办法可以使用超过64 MB的堆...(最大内存:57)? ..我的应用程序会在57MB之后抛出OutOfMemoryException吗?

2 个答案:

答案 0 :(得分:1)

默认最大堆大小为64Mo,获得更多的唯一方法是使用此参数设置最大大小:

-Xmx256m

此参数设置起始值:

-Xms128m

不要忘记最后的“m”意味着兆字节,不要给出比最大值更多的启动内存。 此外,如果您正在寻找它,则没有setMaxHeapSize()函数。

如果你在tomcat中运行你的servlet,你应该试试这个:

export CATALINA_OPTS=-Xms16m -Xmx256m;
在startup.bat中

如果你的servlet需要的不仅仅是JVM可以允许的话,你会在达到极限时遇到奇怪的错误,而且大多数时候会出现OutOfMemoryException,垃圾收集器会尽量避免这种情况,但是在抛出它之前它会爬一点。 / p>

答案 1 :(得分:0)

运行应用程序时,还必须指定最大堆大小。

例如,如果您的类名是HelloWorld,并且您想要将堆大小设置为512mb,那么您必须启动以下命令:

java -Xmx512m HelloWorld