JVM学习(宋红康)之运行时数据区之虚拟机栈中栈帧的动态链接及方法调用

本文探讨了Java虚拟机(JVM)中的动态链接和方法绑定机制。动态链接是指在运行时确定方法调用的过程,而静态链接则在编译时完成。方法的绑定分为早期绑定和晚期绑定,早期绑定对应静态链接,晚期绑定对应动态链接,多态性由此实现。虚方法表在类加载的链接阶段创建,用于优化性能。动态类型语言如Java的Lambda表达式赋予了语言动态特性。方法重写是动态链接的关键,确保了子类对象的多态性使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

动态链接:

动态链接描述:

图解:

常量池的作用就是为了提供一些符号和常量,便于指令的识别。

方法的调用:

在JVM中,将符号引用转换为方法的直接引用与方法的绑定机制有关

  • 静态链接:当一个字节码文件装入JVM内部时,如果被调用的目标方法在编译期能够确定,。且运行期保持不变。这种由符号引用转换为直接引用过程为静态链接
  • 动态链接:被调用的方法在编译期无法确定,程序运行期间才可以确定,这个转换过程称为动态链接。

方法的绑定机制:

绑定:一个字段、方法、类在符号引用替换为直接引用的过程,只发生一次。

  • 早期绑定:对应静态链接
  • 晚期绑定:对应动态链接

多态的特性是因为有早期绑定和晚期绑定机制才能实现的。

子类对象多态性的使用前提:①类的继承关系 ②方法的重写

虚方法和非虚方法

  • 虚方法:(其余方法均为虚方法)
  • 非虚方法:在编译期就确定了具体的调用版本,运行期间不可以改变(静态方法、私有方法、final方法、实例构造器、父类方法

普通调用指令 动态调用指令

静态类型语言和动态类型语言:区别就在于静态类型语言是判断变量自身类型信息

动态类型语言是判断变量值类型信息,变量没有类型信息。

Lambda表达式的引入使得Java具备了动态语言的特点。

方法重写的本质:

为了提高性能,创建了虚方法表:虚方法表是在类加载的链接阶段被创建并开始初始化的。

虚方法举例:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值