Rae*_*ald 14 java jvm correctness exception
我是从C++来的Java.在C++世界中,我们注意异常安全,并注意,mutator可以在mutator本身抛出的异常或它委托给它的方法(最小,强,无抛出)时提供不同的保证.实现具有强异常保证的方法需要保证一些基本操作永远不会抛出异常.JLS声明哪些操作可以抛出哪种异常,但VirtualMachineError
错误会带来问题.答曰JLS:
内部错误或资源限制阻止Java虚拟机实现Java编程语言的语义; 在这种情况下,
VirtualMachineError
抛出一个子类的实例 .
JLS没有再说了VirtualMachineError
."内部错误"意味着JVM中的一个错误,所以我对这种情况不感兴趣:面对JVM中的错误,所有的赌注都是关闭的.但是那个"资源限制"案例呢?是否存在因资源限制而保证永不失败的操作?
Rae*_*ald 14
答曰Java虚拟机规范:
该规范无法预测可能遇到内部错误或资源限制的位置,并且无法准确地确定何时可以报告它们.因此,
VirtualMachineError
可以在Java虚拟机的操作期间的任何时间抛出以下定义的任何子类:
在Java中,因此也不例外保证可相对于作出 VirtualMachineError
例外.所有例外保证必须符合"......但如果VirtualMachineError
抛出则不符合"的资格.这是Java与C++不同的方式之一.
这也表明捕获VirtualMachineError
异常没有多大意义,因为如果抛出一个异常状态,程序将处于未定义状态.不幸的是,这包括OutOfMemoryError
例外.不幸的是,因为如果几个任务中的一个因为需要太多内存而失败,我们可能希望继续执行其他任务.