⑥. 关于invokedynamic指令
①. JVM字节码指令集一直比较稳定,一直到java7才增加了一个invokedynamic指令,这是Java为了实现【动态类型语言】支持而做的一种改进
②. 动态类型语言和静态类型语言两者的却别就在于对类型的检查是在编译期还是在运行期,满足前者就是静态类型语言,反之则是动态类型语言。
③. Java是静态类型语言(尽管lambda表达式为其增加了动态特性),js,python是动态类型语言
Java:String info = "小智";//静态语言 JS:var name = "小智“;var name = 10;//动态语言 Pythom: info = 130;//更加彻底的动态语言
⑦. 方法返回地址(Return Address)
理解如下话:
(pc寄存器每执行一条指令都会被改变
而返回地址在调用call之前一直是上一条call后面的地址,不改变)
①. 存放调用该方法的PC寄存器的值
②. 执行引擎遇到任意一个方法返回的字节码指令(return),会有返回值传递给上层的方法调用者,简称正常完成出口
一个方法在正常调用完成之后究竟需要使用哪一个返回指令还需要根据方法返回值的实际数据类型而定
在字节码指令中,返回指令包含ireturn(当返回值是boolena、byte、char、short和int类型时使用)、lreturn、freturn、dreturn以及areturn(引用类型的)
另外还有一个return指令供声明为void的方法、实例初始化方法、类和接口的初始化方法使用
③. 在方法执行的过程中遇到了异常(Exception),并且这个异常没有在方法内进行处理,也就是只要在本方法的异常表中没有搜素到匹配的异常处理器,就会导致方法退出,简称异常完成出口