Files
Hui-s-notebook/动态类型语言支持.md
2023-09-10 10:50:53 +08:00

1.5 KiB
Raw Permalink Blame History

动态类型语言

动态语言类型:它的类型检查的主体过程是在运行期而不是在编译期进行的 在编译期进行类型过程检查的为静态类型语言 静态类型语言能在编译器确定变量类型,编译器可以提供全面严谨的类型检查,与数据类型相关的潜在问题能在编译时及时发现,利于稳定性及让项目达到更大的规模,动态类型语言在运行时确定类型,可以为开发人员提供极大灵活性,清晰简洁的实现某些功能,提高开发效率

Java与动态类型

动态类型方法调用时,由于无法确定调用对象的静态类型,导致方法内联无法有效进行

java.lang.invoke包

在之前单纯依靠符号引用来确定调用的目标方法之外,通过方法句柄动态确定目标方法 MethodHandle与Reflection的区别

  • 都是在模拟方法调用Reflection时在模拟Java代码层次调用MethodHandle时在模拟字节码层面调用。
  • Reflection中的Method对象比MethodHandle对象包含的信息来得多
  • MethodHandle是对字节码的方法指令调用的模拟虚拟机在这方法做的各种优化在MethodHandle上也可以采用类似的思路去支持。
  • MethodHandle可以服务于Java虚拟机上的所有语言

invokedynamic指令

解决原有的4条invoke*指令方法分派规则完全固化在虚拟机中的问题,把如何查找目标方法的决定权从虚拟机转嫁到具体用户代码中,让用户有更高的自由度