0

我在我的 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)?..我的应用程序会OutOfMemoryException在 57MB 之后抛出吗?

4

2 回答 2

1

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

-Xmx256m

虽然此参数设置起始值:

-Xms128m

不要忘记末尾的“m”表示兆字节,也不要提供比 max 更多的起始内存。此外,如果您正在寻找它,则没有 setMaxHeapSize() 函数。

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

export CATALINA_OPTS=-Xms16m -Xmx256m;

在启动.bat

如果您的 servlet 需要的超出 JVM 允许的范围,则在达到限制时会出现奇怪的错误,并且大多数情况下会出现 OutOfMemoryException,但垃圾收集器会尝试避免这种情况,因此它会在抛出它之前稍微爬一下。

于 2012-08-13T13:04:35.937 回答
0

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

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

java -Xmx512m HelloWorld
于 2012-08-13T13:04:24.503 回答