Из глава 6.3 JVMS:
[...] любой из
VirtualMachineError
подклассов, определенных ниже [InternalError
,OutOfMemoryError
,StackOverflowError
,UnknownError
], может быть вызван в любое время во время работы виртуальной машины Java
Как JVMS определяет фразу «в любое время во время работы виртуальной машины Java»?
Как современные JVM интерпретируют эту фразу?
В частности, означает ли это, что четыре ошибки, java.lang.InternalError
a>, java.lang.OutOfMemoryError
, java.lang.StackOverflowError
и java.lang.UnknownError
, могут быть переброшены между утверждениями? :
// ....
A(); B(); C();
try {
// nothing
} catch (InternalError | OutOfMemoryError | StackOverflowError | UnknownError e) {
// may occur?
}
D(); E(); F();
try {
; // semi-colon
} catch (InternalError | OutOfMemoryError | StackOverflowError | UnknownError e) {
// may occur?
}
G(); H(); I();
try {
; ; ;; ;;;;; ; ; ;;; ;; ;; ;; ;; ; ;; ; ;; // ... semi-colons
} catch (InternalError | OutOfMemoryError | StackOverflowError | UnknownError e) {
// may occur?
}
J(); K(); L();
// ....
ShouldNotReachHere()
в исходных кодах OpenJDK (hg.openjdk.java.net). распространяться по всей виртуальной машине (менеджер памяти, интерпретатор байт-кода). Google:site:openjdk.java.net ShouldNotReachHere
даст вам подсказку. В чем суть вашего вопроса? Вы хотите обвинить виртуальные машины Java в том, что они не дают волшебных гарантий, или хотите решить какую-то конкретную практическую задачу? - person xmojmr   schedule 28.12.2014