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