阿里小哥带你玩转JVM:揭秘try-catch-finally在JVM底层都干了些啥?

发布于:2021-07-19 22:58:28

作者:李瑞杰














我们看 ,是第四个索引指向的字节码出了问题,显然,此时应该匹配红线这一条记录,从而跳转到第14个索引的字节码。


















事实上分析以上的整体的全部语句你可以发现,jvm层面有真正的finally吗?


没有


现在的做法是,复制 finally 代码块的内容,分别放在 try-catch 代码块所有正常执行路径以及异常执行路径的出口中。无论是否出现异常,确保一定会执行finally语句。


刚才catch出了异常,依然执行finally语句就可以发现这一点。至于其他路径,大家可以自行验证。我就在这里抛砖引玉了。


至于为什么2-6发生任何异常都跳转到23?大家可以自己想一下这个问题。


我就提示一点 2-6 target为14的条目代表的catch是不能捕获所有异常的,但是你要确保finally的语句能够执行。而2-6恰巧是try语句块的内容。23这个索引恰巧是finally语句的一份复制。


END


个人公众号:石杉的架构笔记(ID:shishan100)


欢迎长按下图关注公众号:石杉的架构笔记!


公众号后台回复资料,获取作者独家秘制学*资料


石杉的架构笔记,BAT架构经验倾囊相授







相关推荐

最新更新

猜你喜欢