Я пришел на Java из C++. В мире C++ мы обращаем внимание на безопасность исключений и отмечаем, что мутаторы могут предоставлять разные гарантии перед исключениями, которые выдает сам мутатор или метод, которым он делегирует (минимальный, сильный, не-бросок). Реализация метода, который имеет сильную гарантию исключения, требует, чтобы некоторые основные операции гарантировали никогда не выдавать исключение. JLS делает утверждения о том, какие операции могут выполнять какие-либо исключения, но ошибка VirtualMachineError
представляет проблему. Каркнул JLS:No-throw VirtualMachineError гарантирует
внутренняя ошибка или ресурс ограничение предотвращает виртуальную машину Java от реализации семантики Java-программирования языка; в этом случае бросается экземпляр подкласса
VirtualMachineError
.
JLS говорит не более о VirtualMachineError
. «Внутренняя ошибка» означает ошибку в JVM, поэтому меня это не интересует: перед ошибками в JVM все ставки отключены. Но как насчет «ограничения ресурсов»? Есть ли какие-либо операции, которые гарантированы, никогда не сбой из-за ограничения ресурсов?
Ближе всего к ответу будет 'try {...} catch (Throwable t) {}'. Конечно, если память исчерпана, любое продолжение окажется почти невозможным. Теперь это не отличается в C++. –
Я отвечаю на свой вопрос. Часто задаваемые вопросы даже поощряют это. – Raedwald