哪个java.lang.Error子代可以安全捕获?

哪个java.lang.Error子代可以安全捕获?,java,error-handling,uncaught-exception,throwable,uncaughtexceptionhandler,Java,Error Handling,Uncaught Exception,Throwable,Uncaughtexceptionhandler,我非常清楚,通常Java程序不应该捕获可丢弃的错误,因为它正在捕获错误-s,就像OutOfMemoryError。100%清楚 但是 如果我有一个多线程应用程序,这通常是一个最佳实践,我应该有一个UncaughtExceptionHandler,它可以在发生RuntimeException或错误时执行操作。我通常想做的就是简单地记录日志。很明显,记录RuntimeExceptions不会有什么坏处。但问题出现在我身上: 我可以在未捕获的ExceptionHandler中安全地捕获并记录哪些错误,

我非常清楚,通常Java程序不应该捕获可丢弃的
错误,因为它正在捕获
错误
-s,就像
OutOfMemoryError
。100%清楚

但是

如果我有一个多线程应用程序,这通常是一个最佳实践,我应该有一个
UncaughtExceptionHandler
,它可以在发生
RuntimeException
错误时执行操作。我通常想做的就是简单地记录日志。很明显,记录
RuntimeExceptions
不会有什么坏处。但问题出现在我身上:

我可以在未捕获的ExceptionHandler中安全地捕获并记录哪些错误,如果我记录这些错误,这些错误将不会处理整个应用程序?有哪些错误并不意味着应用程序必须立即停止?


例如,如果我得到一个
OutOfMemoryError
,我会要求标准输出一个
printStackTrace
,因为记录它的内存需求可能会杀死其他线程。但是在我看来,记录一个堆栈溢出错误是完全安全的,因为这意味着当前线程的堆栈区域已经满了。记录它是安全的您还将记录哪些
错误后代?

如果您可以对任何可丢弃的内容做一些有建设性的处理,则可以安全捕获。任何你不能做有用的事情的垃圾,都不应该被抓住


顺便说一句:对于catch-all日志记录,当我知道剩余的代码将丢弃该丢弃/错误/异常时,我将
catch(Throwable)
用于日志记录。

我不理解“当我知道它将丢弃它”部分。你所说的“它”是什么意思?@GáborLipták所说的“它”我指的是像错误或例外一样被抛弃的东西。呵呵。我刚刚意识到,这部分包含两次“it”。所以我指的是第一个“it”。这是什么意思?@GáborLipták我已经替换了“it”;)