JVM方法调用-解析和分派

请大家看看我对这个的理解对不对。
如果调用一个虚方法-invokevirtual,首先会在编译时通过静态分派,确定它的重载版本,也就是根据参数的静态类型确定是哪个方法
然后运行时再通过动态分派通过对象的实际类型来确定执行哪个类的方法。具体就是先找具体类型,如果有这个方法,执行;没有就去父类寻找,如此循环。最后将符号引用转化为直接引用

如果调用的是一个非虚方法-invokestatic、invokespecial或者被final修饰的方法,首先还是通过静态分派,确定方法的重载版本。
但是因为这些方法都不可能被重写,所以在类加载的解析阶段就会直接把它们转化为直接引用

静态分派发生在编译时,确定方法重载版本
动态分派发生在运行时,也就是动态连接, 方法调用者不唯一,方法重写的实现
解析发生在类加载的解析阶段,方法调用者唯一

#Java工程师##Java#
全部评论

相关推荐

rbjjj:太杂了吧,同学,项目似乎都没深度,都是api调度耶,分层架构思想没有体现出来了,前端没有前端优化前端工程化体现,后端微服务以及分层架构没体现以及数据安全也没体现,核心再改改,注重于计算机网络,工程化,底层原理吧
点赞 评论 收藏
分享
安静的鲸鱼offer...:神仙级别hr,可遇不可求,甚至他可能也是突然有感而发。只能说遇上是件幸事。
秋招开始捡漏了吗
点赞 评论 收藏
分享
评论
点赞
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务