标签:指令集 不同 erro 出现 垃圾收集器 werror 异常 字节 方法
除了可能会出现在class文件中的这200条指令的操作码,Java虚拟机规范还定义了另外两类操作码: 保留的操作码和"quick”操作码,这两种操作码不会合法地出现在Java class文件中。
Java虚拟机规范列出了三种保留操作码,如表A-1所示。这些操作码是为Java虚拟机实现及其工具所保留的。虚拟机规范保证:这三种操作码将来永远不会成为Java虚拟机指令集的一部分。可想而知,操作码 breakpoint的功能是为调试程序提供断点实现。保留操作码impdep1和impdep2用来作为与实现相关的软件功能的“后门”或者与实现相关的硬件功能的“陷阱”。
java虚拟机的第1版规范还列出了25条“_quick”操作码,这是Sun的早期虚拟机实现用来加速字节码的解释执行的。此项优化技术在第8章中有介绍,但是本附录中并没有对单独的“_quick”指令进行详细介绍(附录C中列出了 “_quidc”操作码的简要介绍和相应操作码的字节值)。如同保留操作码一样,“_quick” 操作码可能不会合法地出现在Java class文件中。但是与保留操作码不同的是:Java虚拟机规范保留了这些执行码在将来的扩展指令集中使用新的含义的可能性。
表A-1 保留操作码
助记符 宇节值
breakpoint 202(0xca)
impdepl 254(Oxfe)
impdep2 255(0xff)
每一个java虚拟机实现的设计者都能够决定如何以及何时检测字节码约束的违规。如果虚拟机实现检测到了约束违规,当(假如)运行中的程序仍然尝试执行该指令时,虚拟机必须通过抛出VerifyError异常的方法来报告这个违规。
除了描述每条指令的约束之外,附录还对每条指令的执行过程进行了描述,列出了在执行指令过程中 可能会抛出的异常和错误。除开在指令描述中明确列出的异常和错误,另外还存在一组错误,它们可以在任何时候、作为任何指令的执行结果被抛出。这些错误是VirtualMachineError的子类。下面列出了VirtualMachineError的四种子类,以及产生它们的相关环境:
• OutOfMemoryError:虚拟机耗尽了所有实际或虚拟的内存,而且垃圾收集器无法获取到足以使线程继续执行的空间。
• StackOverflowError:线程耗尽了栈空间所能提供的所有内存(通常是因为应用程序中无节制地使用递归而引起)。
• InternalError:虚拟机遇到了实现自身的bug,使其无法完全实现Java语言的语义。
• UnknownError:虚拟机遇到了一些错误,但无法通过抛出相应的异常或错误来报告实际情况。
标签:指令集 不同 erro 出现 垃圾收集器 werror 异常 字节 方法
原文地址:https://www.cnblogs.com/mongotea/p/11980094.html