JavaEE应用是否可以使用超过最大堆内存

JavaEE应用是否可以使用超过最大堆内存,java,heap,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:" + r

我在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?我想知道-我的应用程序是否可以使用超过64MB的堆…(最大内存:57)。。我的应用程序是否会在57MB后抛出
OutOfMemoryException

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

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

java -Xmx512m HelloWorld

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

-Xmx256m
当此参数设置开始值时:

-Xms128m
不要忘记末尾的“m”表示兆字节,也不要提供比max更多的启动内存。 此外,如果您正在查找setMaxHeapSize()函数,则不存在该函数

如果您在tomcat中运行servlet,您应该尝试以下方法:

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


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

如果您需要更多,你不能用-Xmx256m在JVM中定义更多吗?然后把这个参数添加到你的JVM中(比如当你启动tomcat服务器时)。您无法从JVM内部以编程方式执行此操作。不。。我想限制堆内存的使用。这就是为什么我设置-Xmx64m。。即使我将最大值设置为64mb。。这是否确保了我的应用程序不会使用超过64Mb的内存,然后你会得到一个OOM异常。在jdk6之前是64Mb,然后从jdk6开始是256Mb。根据这个答案:那么OP使用的是较旧的JDK?即5或更旧的?我猜是这样,或者他手动将Xmx设置为64m,只是想知道他的应用程序在达到64m时会有什么反应