深入理解jvm读书笔记十五 jvm执行引擎之方法调用

方法调用不同于方法执行,方法调用阶段唯一的任务就是确定调用方法的版本(即调用哪个方法),暂时还不涉及方法内部的具体运行过程。

编译期间就能确定调用哪个方法-----解析

分派

分派过程将会揭示重载和重写在jvm是如何实现的。

静态分派

确定一个方法涉及几个角色,方法接收者、接收者的静态类型或实际类型、方法的描述符(主要是名称和参数)、参数的静态类型和实际类型。

静态分派过程是在编译期间发生的,根据方法接收者的静态类型、以及方法参数的静态类型确定方法的符号引用。

所谓的"编译期间就能确定"意思是,确定方法涉及到的接收者和方法参数类型都是静态类型,而静态类型是可以在编译期确定的。

但是运行期,方法的接收者是根据实际类型来确定的,也就是说静态分派实际上只是能在一个类的多个重载方法中确定一个方法,只是确定了方法的描述符,并不能确定真正的方法接收者。

静态分派的过程:

  1. 根据调用者的静态类型找到常量池中对应的class_info常量
  2. 根据调用参数的静态类型以及参数的个数和顺序确定常量池中的method_ref常量

例子1

例子2

总结

动态分派

动态分派和重写有着很重要的联系。

单分派与多分派

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值