【发布时间】:2011-11-13 03:42:22
【问题描述】:
当 Java 虚拟机无法分配对象时抛出,因为 内存不足,无法再提供内存 垃圾收集器
Java 说:
错误是 Throwable 的子类,表示存在严重问题 一个合理的应用程序不应该试图捕捉。大多数这样的 错误是异常情况。
这感觉就像在听:
如果您溺水,请保持理智:您不应该尝试向上游泳 让你的头保持在水面之上。死亡通常是由于 异常情况。
让我们想象一个正在运行服务的场景。由于某种原因,同一服务器上的另一个应用程序正在消耗大量内存,从而导致您的服务出现意外的 OOM。尝试减少此服务的内存消耗以保持对用户可用是不是一个坏主意?
或者在抛出 OOM 之后,JVM 级别是否发生了更根本的事情,阻止了这种解决方案的实施?
【问题讨论】:
-
@aix 我可以通过将某些数据结构设置为 null 来减少对某些数据结构的引用,即使我没有正确保存它们,但在戏剧性的情况下仍然可以接受。
-
@dogbane 您的参考资料没有回答我的问题,这个问题不是重复的。
-
一个更好的类比是:您驾驶着一辆着火的汽车。不要试图继续到达目的地。拉到坚硬的肩膀上。
-
如果您的服务可以选择在 OOM 之后使用更少的内存,那么为什么不总是使用更少的内存来避免 OOM?
-
@JVerstry 在这种情况下,飞机正俯冲入大西洋,而您距离水面仅 100 米,两个引擎都发生故障。你对此无能为力。让它沉入水中!
标签: java try-catch out-of-memory