Vine a Java desde C++. En el mundo de C++ prestamos atención a la seguridad de las excepciones, y notamos que los mutadores pueden proporcionar diferentes garantías frente a las excepciones lanzadas por el propio mutador o un método al que delega (mínimo, fuerte, sin lanzamiento). La implementación de un método que tiene una fuerte garantía de excepción requiere que algunas operaciones básicas estén garantizadas para no arrojar nunca una excepción. El JLS realiza afirmaciones sobre qué operaciones pueden arrojar qué tipos de excepciones, pero el error VirtualMachineError
presenta un problema. Dijo el JLS:No-throw VirtualMachineError garantiza
una limitación de error o un recurso interno impide que la máquina virtual de Java de la implementación de la semántica de programación Java idioma; en este caso, se lanza una instancia de una subclase de
VirtualMachineError
.
El JLS dice no más sobre VirtualMachineError
. Un "error interno" significa un error en la JVM, por lo que no estoy interesado en ese caso: a pesar de los errores en la JVM, todas las apuestas están desactivadas. Pero, ¿qué pasa con el caso de "limitación de recursos"? ¿Hay alguna operación que garantice que nunca fallará debido a una limitación de recursos?
Lo más parecido a una respuesta sería 'try {...} catch (Throwable t) {}'. Por supuesto, si la memoria se agota, cualquier continuación resultará ser casi imposible. Ahora eso no es diferente en C++. –
Estoy respondiendo mi propia pregunta. Las preguntas frecuentes incluso eculra esto. – Raedwald