关于invokedynamic指令

JVM字节码指令集一直比较稳定,到Java7中才增加了一个invokedynamic指令,这是Java为了实现动态类型语言支持做的一种改进。但是Java7中没有提供直接生成invokedynamic指令的方法,需要借助ASM这种底层字节码工具来产生invokedynamic指令。到Java8Lambda表达式出现,invokedynamic指令的生成,在Java中才有了直接的生成方式。

Java7中增加的动态语言类型支持的本质是对Java虚拟机规范的修改,而不是对Java语言规则的修改,这一块相对比较复杂,增加了虚拟机中的方法调用,最直接的受益者就是运行在Java平台的动态语言的编译器。

动态类型语言与静态类型语言:

动态类型语言和静态类型语言的区别在于对类型的检查是在编译期还是运行期,满足前者是静态类型语言,反之是动态类型语言。

静态类型语言是判断变量本身的类型信息,动态类型语言是判断变量值的类型信息,变量没有类型信息,变量值才有类型信息;这是动态语言的一个重要特征。例如:

  • Java: String info =”eleanor”;//info=eleanor;静态类型语言
  • Python:info=15.8;动态类型语言
欢迎批评指正,提出问题,谢谢!
原文地址:https://www.cnblogs.com/xxeleanor/p/13657374.html