我在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
吗?
答案 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