当前位置: 首页 > news >正文

Jvm是如何处理异常的

异常抛出

当Java程序运行时遇到无法处理的情况时,会抛出一个异常(比如在一个方法中如果发生异常),这时会创建一个异常对象,并转交给JVM,该异常对象包含异常名称,异常描述以及异常发生时应用程序的状态。创建异常对象并转交给JVM的过程称为抛出异常。

异常捕捉

当JVM检测到异常被抛出时,它会查看当前执行线程的调用栈(call stack)。会顺着调用栈从当前方法开始,逐级向上查找是否有可以处理该异常的代码块(catch块)。JVM使用异常表中的信息来确定哪些catch块能够处理这个异常。它会从上至下匹配异常处理器,直到找到第一个能够处理该异常的catch块。

异常表
在编译Java程序时,编译器会为每个方法生成一个异常表。这个异常表包含了方法内部可能抛出的异常类型以及对应的异常处理器(catch块)的位置信息。异常表中的每一个条目都包含了从指针(from pointer)、到指针(to pointer)、目标指针(target pointer)以及所捕获的异常类型。这些指针的值是字节码索引(bytecode index, bci),用于定位字节码中异常处理器监控的范围。

异常处理

一旦找到可以处理异常的catch块,JVM会将异常对象传递给该catch块,并执行其中的异常处理代码。如果JVM没有找到可以处理该异常的catch块,它会将该异常转交给默认的异常处理器(通常是JVM的一部分)。默认异常处理器会打印出异常信息并终止应用程序的执行。

f

http://www.lryc.cn/news/405431.html

相关文章:

  • recursion depth exceeded” error
  • 虚拟现实和增强现实技术系列—Expressive Talking Avatars
  • 网站验证:确保网络安全与信任的重要步骤
  • C语言——字符串比较函数strcmp和strncmp
  • redis的集群模式
  • 基于微信小程序+SpringBoot+Vue的青少年科普教学系统平台(带1w+文档)
  • 智能听觉:从任务特定的机器学习到基础模型
  • 14、如何⽤DDD设计微服务代码模型
  • ArcGIS Pro SDK (九)几何 12 多面体
  • 二次元手游《交错战线》游戏拆解
  • 【BUG】已解决:Downgrade the protobuf package to 3.20.x or lower.
  • Java开发之Redis
  • Java面试八股之 Spring Bean的生命周期
  • SQL中的函数
  • VSCode | 修改编辑器注释的颜色
  • 媒体邀约专访与群访的区别?
  • Pycharm2024最新版community社区版下载安装配置,快速上手
  • 服务器选择租用还是托管?托管和租用哪个比较划算
  • 智能制造·数字化工厂建设规划方案(65P)
  • ACM中国图灵大会专题 | 图灵奖得主Manuel Blum教授与仓颉团队交流 | 华为论坛:面向全场景应用编程语言精彩回顾
  • k8s 公共服务
  • 【数据分析详细教学】全球气温变迁:一个多世纪的数据分析
  • AV1技术学习:Reference Frame System
  • 数学建模(7)——Logistic模型
  • “微软蓝屏”事件,给IT行业带来的宝贵经验和教训
  • QT总结——图标显示坑
  • SQL 注入漏洞详解 - Union 注入
  • Qt创建自定义组件并且promote to之后导致编译错误(CMake)
  • 告别写作瓶颈,4款AI协作工具助你迸发灵感
  • java30-Shiro