Java虚拟机分派:

静态分派:静态方法
动态分配:重写和重载(为每一个类创建一个方法表,快速定位目标)
其一,子类方法表中包含父类方法表中的所有方法;
其二,子类方法在方法表中的索引值,与它所重写的父类方法的索引值相同。
在执行过程中,Java 虚拟机将获取调用者的实际类型,并在该实际类型的虚方法表中,根据索引值获得目标方法。
关联内联缓存()

首先JVM在编译的时候,每个方法都会附带一个异常表(异常表会声明会被抛出的异常,而不是可能抛出的异常,包括catch里面自定义的异常)。异常表中每一个条目代表一个异常发生器,异常发生器由 From指针,To指针,Target指针和应该捕获的异常类型构成。 其中From指针和To指针该异常处理器所监控的范围,例如在try{}里面。 而target指针则指向异常处理器的起始位置。例如catch代码块的起始位置。

如何捕获异常:有一个异常表(from, to, target,type)
JVM会在当前出现异常的方法中,查找异常表,是否有合适的处理者来处理。
如果当前方法异常表不为空,并且异常符合处理者的from和to节点,并且type也匹配,则JVM调用位于 target 指针指向的字节码来处理。
如果上一条未找到合理的处理者,则继续查找异常表中的剩余条目。
如果当前方法的异常表无法处理,则向上查找(弹栈处理)刚刚调用该方法的调用处,并重复上面的操作。
如果所有的栈帧被弹出,仍然没有处理,则抛给当前的Thread,Thread则会终止。
如果当前Thread为最后一个非守护线程,且未处理异常,则会导致JVM终止运行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值