gpt4 book ai didi

java - 不抛出 VirtualMachineError 保证

转载 作者:搜寻专家 更新时间:2023-10-30 19:58:33 25 4
gpt4 key购买 nike

我是从 C++ 转到 Java 的。在 C++ 世界中,我们关注异常安全,并注意到变元器可以在变元器本身或其委托(delegate)的方法抛出异常时提供不同的保证(最小、强、不抛出)。实现具有强异常保证的方法需要保证一些基本操作永远不会抛出异常。 JLS 声明哪些操作可以抛出哪些类型的异常,但是 VirtualMachineError 错误会带来问题。 JLS :

an internal error or resource limitation prevents the Java virtual machine from implementing the semantics of the Java programming language; in this case, an instance of a subclass of VirtualMachineError is thrown.

JLS 不再提及 VirtualMachineError。 “内部错误”意味着 JVM 中的错误,所以我对这种情况不感兴趣:面对 JVM 中的错误,所有赌注都没有了。但是“资源限制”案例呢?是否有任何操作可以保证永远不会因为资源限制而失败?

最佳答案

Java Virtual Machine Specification :

This specification cannot predict where internal errors or resourcelimitations may be encountered and does not mandate precisely whenthey can be reported. Thus, any of the VirtualMachineError subclassesdefined below may be thrown at any time during the operation of theJava virtual machine:

因此在 Java 中对于 VirtualMachineError 异常 不能做出异常保证。所有异常保证都必须符合条件“...但如果抛出 VirtualMachineError 则不然”。这是 Java 与 C++ 不同的地方之一。

这也表明捕获 VirtualMachineError 异常没有多大意义,因为如果抛出异常,程序将处于未定义状态。不幸的是,这包括 OutOfMemoryError 异常。不幸的是,因为如果一个程序有几个独立的任务要执行(例如,一个网络服务器),如果一个任务因为需要太多内存而失败,我们可能想继续其他任务。

关于java - 不抛出 VirtualMachineError 保证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8728866/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com