为什么没有OutOfMemoryError子类?

Tom*_*icz 6 java exception out-of-memory subclassing

众所周知,有多种原因OutOfMEmoryError(见第一个答案).为什么只有一个例外情况涵盖了所有这些情况而不是继承的多个细粒度情况OutOfMEmoryError

UML

Fem*_*emi 8

我期待,因为当发生这种情况时你真的不能做任何其他事情:因为你无论如何都被搞砸了,这几乎无关紧要.也许额外的信息会很好,但......

我知道tomcat尝试做这个"Out Of Memory Parachute"的事情,他们抓住了一大块内存并尝试释放它,但我不确定它的效果如何.


Ste*_*n C 7

如果应用程序需要能够以不同方式捕获和处理不同的情况,则只需要子类化异常.但你不应该抓住并试图从这些案件中恢复......所以不应该出现这种需要.

...但是,我仍然希望有一个更具描述性的理由让我死亡.

异常消息告诉您哪些OOME子案例已发生.如果您抱怨邮件过于简短,那么Java异常消息的作用就不是对它们报告的问题给出完整的解释.这就是javadocs和其他文档的用途.


@Thorbjørn提出了同样引人注目的论点.基本上,不同的子句都是特定于实现的.使它们成为标准API的一部分可能会限制 JVM实现以次优方式执行以满足API要求.当为新的特定于实现的子类创建新的子类时,这种方法可能会产生不必要的应用程序可移植性障碍.

(例如,假设UnableToCreateNativeThreadError1)假设线程创建因内存不足而失败,以及2)内存不足与正常内存不足有本质区别.2)适用于当前的Oracle JVM,但不适用于所有JVM.1)对于当前的Oracle JVM,可能甚至都不是这样.由于操作系统对本机线程数量施加限制,线程创建可能会失败.)


如果您对尝试从OOME恢复是一个坏主意感兴趣,请参阅以下问题:


Tho*_*sen 7

故意非常模糊地描述垃圾收集过程,以便为JVM实现者提供尽可能大的自由.

因此,您提到的类不在API中提供,而是仅在实现中提供.

如果您依赖它们,如果在没有这些特定于供应商的子类的JVM上运行,您的程序将会崩溃,因此您不会这样做.


归档时间:

查看次数:

538 次

最近记录:

14 年,4 月 前