动态链接(Dynamic Linking)
每一个栈帧内部都包含一个指向运行时数据常量中的该栈帧所属方法的引用,包含这个引用的目的就是为了支持当前方法的方法的代码能够实现动态链接。比如invokedynamic指令
在Java源文件中被编译到字节码的中时,所有的变量的和方法的引用都作为符号引用(Symbolic Reference),保存在class文件的常量池中。
字节码中的方法调用指令就以常量池中指向方法的符号引用作为参数。
- 比如描述一个方法调用 另一个方法的时,就是通过常量池中指向方法的符号引用来表示的
动态链接的作用就是为了将这些符号引用转换为调用方法的直接引用。
-
一部分会在类加载阶段或者第一次使用的时候就转化为直接引用,这种转化称为静态解析。 -
另外
一部分将在每一次运行期间转化为直接引用,这部分称为动态连接。- 动态链接或者指向运行时常量池的方法引用
需要运行时常量池的原因:
- 常量次的作用,就是为了一些提供符号的,便于指令的识别
方法的调用
对应的绑定机制为:早期绑定(Early Binding)和晚期绑定(Late Binding),绑定时一个字段、方法或类在符号引

本文深入探讨Java虚拟机栈中的动态链接,包括方法调用的虚方法和非虚方法、虚方法表等概念。动态链接允许在运行时解析方法,支持多态性。虚拟机通过虚方法表优化动态分派,提高执行效率。
&spm=1001.2101.3001.5002&articleId=115831205&d=1&t=3&u=da626cbccbc04f28be97432723f0e4db)
3996

被折叠的 条评论
为什么被折叠?



