1. 异常表

1.1. 异常

关键字和接口-7、Throwable

1.2. 生成逻辑

image.png

没有 try-catch 或者 try-finally 的情况下,是不会生成异常表结构的,比如下面 2 种情况: ❕%%
2133-🏡⭐️◼️异常表生成原理 ?🔜MSTM📝 一个方法加了 try-catch 或者 try-finally,才会在方法信息中生成方法表◼️⭐️-point-202302132133%%

image.png

异常类也是需要 GC 的

性能调优专题-基础-4、JVM-堆和GC理论

1.3. 生成位置

在方法区中的方法信息中存放
%%
2134-🏡⭐️◼️异常表的位置 ?🔜MSTM📝 方法区中的方法信息中◼️⭐️-point-202302132134%%

性能调优专题-基础-3、JVM-方法区和3个池子

1.4. 异常处理

  1. 当一个异常被抛出时,JVM 会在 [当前的方法里的异常表中] 寻找一个匹配的处理,如果没有找到,这个方法会强制结束并弹出当前栈帧,并且异常会重新拋给上层调用的方法(在调用方法栈帧)。如果在所有栈帧弹出前仍然没有找到合适的异常处理,这个线程将终止。如果这个异常在最后一个非守护线程里抛出,将会导致 JVM 自己终止,比如这个线程是个 main 线程。
  2. 不管什么时候抛出异常,如果异常处理最终匹配了所有异常类型,代码就会继续执行。在这种情况下,如果方法结束后没有抛出异常,仍然执行 finally 块, 在 return 前, 它直接跳到 finally 块来完成目标

2. 实战经验

3. 参考与感谢

3.1. 尚硅谷宋红康

https://www.bilibili.com/video/BV1PJ411n7xZ?p=264&spm_id_from=pageDriver&vd_source=c5b2d0d7bc377c0c35dbc251d95cf204

对象创建-7、JVM-堆

3.2. 测试代码

[[ExceptionTest.java]]