捕获OutOfMemoryError是一个坏主意吗?

Jér*_*nge 7 java try-catch out-of-memory

可能重复:
捕获java.lang.OutOfMemoryError

OutOfMemoryError是:

当Java虚拟机因内存不足而无法分配对象时抛出,并且垃圾收集器不再提供更多内存

Java说:

Error是Throwable的子类,表示合理的应用程序不应该尝试捕获的严重问题.大多数此类错误都是异常情况.

这听起来像听到:

如果你溺水,那就合理一点:你不应该试着向上游泳以保持头脑清醒.死亡通常是由异常情况引起的.

让我们想象一个运行服务的场景.出于某种原因,同一服务器上的另一个应用程序正在占用大量内存,从而导致服务中出现意外的OOM.尝试减少此服务的内存消耗以保持用户可用是不是一个坏主意?

或者是否有一些更基本的事情发生在JVM级别,阻止在抛出OOM后实现这样的解决方案?

Mik*_*wan 0

这里的问题是 OOM 是一个在正常情况下不应该发生的错误。通过捕获它并尝试释放内存,您可能会掩盖其他地方的某种泄漏或意外行为。

如果确实出现 OOM,可能是因为您没有配置 JVM 以使用更多内存。