Eld*_*ael 17 java exception virtual-machine
我一直在阅读JLS,我遇到了第11.1.3节.我引用的异步异常:
大多数异常由于它们发生的线程的动作而同步发生,并且在程序中被指定可能导致这种异常的点.相反,异步异常是可能在程序执行的任何时刻发生的异常.
和
异步异常仅在以下情况下发生:
[...]
- Java虚拟机中的内部错误或资源限制,阻止它实现Java编程语言的语义.在这种情况下,抛出的异步异常是VirtualMachineError的子类的实例.
是否有可能为记录目的或通知捕获此类异常(因为我认为这样的事情是不可恢复的)?我怎么能实现这样的呢?
Phi*_*ler 17
您可以像任何其他异常一样捕获此类异常.唯一的问题是它们可能出现在程序的任何地方,因此很难捕获它们.你基本上必须将run所有线程的main方法和方法包装在一个try..catch块中,但你不能对你不能控制的线程(比如Swing EDT,或者定时器的线程等)这样做.
Error通常也不建议捕获任何子类,因为JVM可能处于不稳定状态,这可能会导致进一步的失败(例如,在这种情况下OutOfMemoryError,您甚至可能没有足够的内存来处理异常).然而,伐木将是Error在我眼中捕捉s 的正当理由.
我建议的解决方案是通过将其设置为默认异常处理程序来使用未捕获的异常处理程序.在此处理程序中,如果未在代码中的任何位置捕获它们,您将获得所有异常和错误,并且您可以尝试记录它们.
| 归档时间: |
|
| 查看次数: |
8930 次 |
| 最近记录: |