JVM学习(宋红康)之运行时数据区之虚拟机栈中栈帧的动态链接及方法调用
动态链接:
动态链接描述:
图解:
常量池的作用就是为了提供一些符号和常量,便于指令的识别。
方法的调用:
在JVM中,将符号引用转换为方法的直接引用与方法的绑定机制有关
- 静态链接:当一个字节码文件装入JVM内部时,如果被调用的目标方法在编译期能够确定,。且运行期保持不变。这种由符号引用转换为直接引用过程为静态链接
- 动态链接:被调用的方法在编译期无法确定,程序运行期间才可以确定,这个转换过程称为动态链接。
方法的绑定机制:
绑定:一个字段、方法、类在符号引用替换为直接引用的过程,只发生一次。
- 早期绑定:对应静态链接
- 晚期绑定:对应动态链接
多态的特性是因为有早期绑定和晚期绑定机制才能实现的。
子类对象多态性的使用前提:①类的继承关系 ②方法的重写
虚方法和非虚方法
- 虚方法:(其余方法均为虚方法)
- 非虚方法:在编译期就确定了具体的调用版本,运行期间不可以改变(静态方法、私有方法、final方法、实例构造器、父类方法)
普通调用指令 动态调用指令
静态类型语言和动态类型语言:区别就在于静态类型语言是判断变量自身类型信息
动态类型语言是判断变量值类型信息,变量没有类型信息。
Lambda表达式的引入使得Java具备了动态语言的特点。
方法重写的本质:
为了提高性能,创建了虚方法表:虚方法表是在类加载的链接阶段被创建并开始初始化的。
虚方法举例: