码迷,mamicode.com
首页 > 其他好文 > 详细

JVM是如何处理异常的

时间:2021-04-19 15:48:27      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:实现类   继承   编写   throw   运行   flow   run   ror   hand   

【deerhang】

  • java的异常全部继承于Throwable,Throwable下有两个实现类:Error和Exception
    • Error意味着不可恢复的错误,例如OutOfMemoryError和StackOverFlowError,这类错误信息不需要捕获,一般无法自动恢复。
    • Exception下分为两类异常,RuntimeException和非运行时异常
      • RuntimeException:运行时异常,一般不需要显示捕获处理
      • 非RuntimeException:非运行时异常,需要显示的捕获处理
  • 异常的定义在程序编写中至关重要,它可以帮助我们快速定位错误信息排查问题,补充异常逻辑,保持程序的完整性和可用性。异常实例的构造代价昂贵,在构造异常实例时,Java虚拟机会构造栈帧的调用轨迹,定位发生异常的类、方法、行数,这些长链路的分析伴随着性能的消耗。写到这里我们可以思考一下:既然异常实例的构建代价这么高,是否可以缓存一个异常实例给全局使用呢?从实现的角度上来说是可以做到的,不过抛出的异常信息并不是调用异常的方法,而是创建异常实例的地方。这里就可以说明为什么我们每次使用异常的时候都会new一个新的实例了。
  • 异常信息的定位通过三个标识实现的,分别是from、to、target,from和to指针标记了异常处理器监控的范围,target指针标记了异常开始的位置。在编译生成字节码的过程中,会为每个异常生成一个异常表,当触发异常时JVM会在异常表中比对异常是否匹配,当异常信息匹配成功的时候就会执行异常处理代码。当异常信息不匹配的时候直接向上抛出异常。
    try { doSomething(); } catch (Exception e) { handleSomething(); }

JVM是如何处理异常的

标签:实现类   继承   编写   throw   运行   flow   run   ror   hand   

原文地址:https://www.cnblogs.com/deer-hang/p/14670401.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!