服装电子商务网站建设与实现,互联网app开发,网站 备案已注销,杭州电子商务公司排行1、Java 虚拟机是如何捕获异常的#xff1f;
答#xff1a;
在编译生成的字节码中#xff0c;每个方法都附带一个异常表。异常表中的每一个条目代表一个异常处理器#xff0c;并且由 from 指针、to 指针、target 指针以及所捕获的异常类型构成。这些指针的值是字节码索引…1、Java 虚拟机是如何捕获异常的
答
在编译生成的字节码中每个方法都附带一个异常表。异常表中的每一个条目代表一个异常处理器并且由 from 指针、to 指针、target 指针以及所捕获的异常类型构成。这些指针的值是字节码索引bytecode indexbci用以定位字节码。
其中from 指针和 to 指针标示了该异常处理器所监控的范围例如 try 代码块所覆盖的范围。target 指针则指向异常处理器的起始位置例如 catch 代码块的起始位置。 当异常发生时JVM会去遍历异常表中的所有条目如果发现异常发生的位置在某个条目的from-to的范围内那么就会对比抛出的异常和捕获的异常是否一致。如果一致跳转到target指针指向的异常处理器的起始位置执行。一旦该方法的异常表没有找到则会在弹出该方法对应的栈帧对调用该方法的方法执行同样的处理。
最坏的情况就是遍历整个线程栈也没有匹配的异常。 2、为什么finally总会被执行
1通过Code对应字节码内容可以看出finally代码块在各种可能得分支下都复制了1份冗余设计不出异常的情况总是会被执行到
2从异常表中可以得出出现异常先跳转到catch里执行catch执行完后在跳转到finally里执行。所以 finally总是会被执行。
举例
首先从异常表中可以看出0~4不包括4范围内发生异常则立即跳转到7位置处理异常另外0 ~4(try块)范围无论发生异常必须转向15的位置执行finally块中的代码另外7 ~12(catch块)范围内无论是否发生异常也必须转向15的位置执行finally块。 3、请简述JVM运行时数据区的组成结构及各部分作用
4、说说程序计数器的作用?5、java内存区域局部变量在哪 答案在Java虚拟机JVM-运行时数据区域说明_沐雪架构师的博客-CSDN博客