JVM"如何抛出"一个例外

时间:2014-11-23 07:30:15

标签: java java-ee exception

我知道JVM有一个异常表,用于映射可能在给定字节码索引中抛出的异常。我还读到了远程字节码抛出了堆栈顶部存在的引用类型。我的问题更多地涉及像irem" throw"例外。

在每次执行指令后,JVM是否检查堆栈顶部以检查是否存在异常?非常感谢有关这方面的任何见解。

1 个答案:

答案 0 :(得分:2)

irem是“逻辑int余数”运算符。 Java虚拟机规范writes

  

运行时异常

     

如果int余数运算符的除数值为0,irem会抛出ArithmeticException

未指定JVM实现如何完成。它可以指示CPU在执行除法之前将除数与零进行比较,或者执行除法,然后对有问题的CPU作出反应,发出除0的信号。由于零除可能很少,后一种策略可能更有效。

例如,Intel 64 and IA-32 architectures software developer's manual combined volumes 3A, 3B, and 3C: System programming guide写道:

  

6.1中断与例外概述

     

当处理器在执行指令时检测到错误条件(例如除以零)时发生异常。处理器检测各种错误情况,包括保护违规,页面错误和内部机器故障。 Pentium 4,Intel Xeon,P6系列和Pentium处理器的机器检查架构   还可以在检测到内部硬件错误和总线错误时生成机器检查异常。

     

当收到中断或检测到异常时,当处理器执行中断或异常时,当前正在运行的过程或任务被暂停   ndler。当处理程序的执行完成时,处理器恢复执行中断的过程或任务。恢复中断的程序或   任务发生时不会丢失程序连续性,除非无法从异常中恢复或中断导致当前正在运行的程序终止。

因此,JVM将定义该异常处理程序以创建异常对象,在一个众所周知的寄存器中保留对它的引用,然后继续执行一个字节码指令。