The error (especially the VirtualMachineError subclass) indicates that the JVM is facing an internal problem - this means that its internal state can no longer be consistent. If you catch an error and try to recover, the future behavior is undefined. The reason Throwable errors are because they can be thrown - for example, you can do it yourself for errors in the native library from which it is impossible to recover (for example, the library could be written to JVM memory or its internal static state may be damaged ) For all Throwables, the same technique is used to produce walking stacks and stacks, and it would be foolish to have a different mechanism to do the same.
JVM, VirtualMachineErrors, - , - AWTError, ZipError.
, - : AssertionError LinkageError, / . .