我知道JVM有一个异常表,用于映射可能在给定字节码索引中抛出的异常。我还读到了远程字节码抛出了堆栈顶部存在的引用类型。我的问题更多地涉及像irem" throw"例外。
在每次执行指令后,JVM是否检查堆栈顶部以检查是否存在异常?非常感谢有关这方面的任何见解。
答案 0 :(得分:2)
irem是“逻辑int余数”运算符。 Java虚拟机规范writes:
运行时异常
如果
int
余数运算符的除数值为0,irem
会抛出ArithmeticException
。
未指定JVM实现如何完成。它可以指示CPU在执行除法之前将除数与零进行比较,或者执行除法,然后对有问题的CPU作出反应,发出除0的信号。由于零除可能很少,后一种策略可能更有效。
6.1中断与例外概述
当处理器在执行指令时检测到错误条件(例如除以零)时发生异常。处理器检测各种错误情况,包括保护违规,页面错误和内部机器故障。 Pentium 4,Intel Xeon,P6系列和Pentium处理器的机器检查架构 还可以在检测到内部硬件错误和总线错误时生成机器检查异常。
当收到中断或检测到异常时,当处理器执行中断或异常时,当前正在运行的过程或任务被暂停 ndler。当处理程序的执行完成时,处理器恢复执行中断的过程或任务。恢复中断的程序或 任务发生时不会丢失程序连续性,除非无法从异常中恢复或中断导致当前正在运行的程序终止。
因此,JVM将定义该异常处理程序以创建异常对象,在一个众所周知的寄存器中保留对它的引用,然后继续执行一个字节码指令。