当前位置: 首页 > news >正文

JVM: 方法调用

文章目录

  • 一、介绍
  • 二、方法调用的原理
    • 1、静态绑定
    • 2、动态绑定
      • (1)介绍
      • (2)原理

一、介绍

在JVM中,一共有五个字节码指令可以执行方法调用:

  • invokestatic: 调用静态方法。
  • invokespecial:调用对象的private方法、构造方法,以及使用super关键字调用父类实例的方法、构造方法、以及所实现接口的默认方法。
  • invokevirtual:调用对象的非private方法。
  • invokeinterface:调用接口对象的方法。
  • invokedynamic:用于调用动态方法,主要应用于lambda表达式中,机制极为复杂了解即可。

二、方法调用的原理

Invoke指令执行时,需要找到方法区中instanceKlass中保存的方法相关的字节码信息。但是方法区中有很多类,每一个类又包含很多个方法,怎么精确地确定到方法的位置呢?
在这里插入图片描述

1、静态绑定

  • 编译期间,invoke指令会携带一个参数符号引用,引用到常量池中的方法定义。方法定义中包含了类名+方法名+返回值+参数。
  • 在方法第一次调用时,这些符号引用就会被替换成内存地址的直接引用,这种方式称之为静态绑定。
  • 静态绑定适用于处理静态方法、私有方法、或者使用final修饰的方法,因为这些方法不能被继承之后重写。
    在这里插入图片描述

2、动态绑定

(1)介绍

对于非static、非private、非final的方法,有可能存在子类重写方法,那么就需要通过动态绑定来完成方法地址绑定的工作。比如在下面这段代码中,调用的其实是Cat类对象的eat方法,但是编译完成之后虚拟机指令中调用的是Animal类的eat方法,这就需要在运行过程中通过动态绑定找到Cat类的eat方法,这样就实现了多态。

(2)原理

动态绑定是基于方法表来完成的,invokevirtual使用了虚方法表(vtable),invokeinterface使用了接口方法表(itable),整体思路类似。所以接下来使用invokevirtual和虚方法表来解释整个过程。

每个类中都有一个虚方法表,本质上它是一个数组,记录了方法的地址。子类方法表中包含父类方法表中的所有方法;子类如果重写了父类方法,则使用自己类中方法的地址进行替换。
在这里插入图片描述
产生invokevirtual调用时,先根据对象头中的类型指针找到方法区中InstanceClass对象,获得虚方法表。在根据方法表找到对应的对象,获得方法的地址,最后调用方法。
在这里插入图片描述

http://www.lryc.cn/news/413731.html

相关文章:

  • 测试面试宝典(四十一)—— 接口自动化的优缺点
  • “火炬科企对接”先进计算产业推进会 | 麒麟信安受邀参加,并签署开源生态合作协议
  • 中文网址导航模版HaoWa1.3.1/模版网站wordpress导航主题
  • 图欧学习资源网创站以来的更新日志(截止至2022.5.6)不完全统计
  • 现代前端架构介绍(第二部分):如何将功能架构分为三层
  • LeetCode Easy|【21. 合并两个有序链表】
  • 大模型的架构参数是指定义模型基本结构和组成的各种参数,这些参数对模型的性能、训练效率和泛化能力具有重要影响。以下是对大模型架构参数的详细介绍
  • 人工智能会越来越闭源——对话东北大学副教授王言治 | Open AGI Forum
  • 【前端】(仅思路)如何在前端实现一个fc手柄,将手机作为游戏手柄设备。
  • 三十种未授权访问漏洞合集
  • 【Golang 面试 - 进阶题】每日 3 题(十五)
  • Java中实现文件上传
  • 一种别样的Unicode Python编码方式,完美转换表情和阿拉伯语
  • 小白的晋升之路
  • WebLogic:CVE-2017-10271[XML反序列化]
  • Day13--JavaWeb学习之Servlet后端渲染界面
  • 【MySQL】全面剖析索引失效、回表查询与索引下推
  • 1、爬⾍概述
  • 科普文:微服务之分布式链路追踪SkyWalking单点服务搭建
  • R 语言学习教程,从入门到精通,R的安装与环境的配置(3)
  • 【Pageadmin】之cms漏洞
  • AIGC重塑设施农业:让农事操作更智能,生产效率更高
  • netty应用-手写RPC
  • 私域流量变迁与精细移动化趋势下的AI智能名片小程序源码应用探索
  • 数据结构初阶之排序(下)
  • RGB图像的读取与保存
  • 江协科技51单片机学习- p35 AD/DA模拟/数字采样
  • C#裁剪图像的几种方法总结
  • 被遗忘的哑终端 —— 键盘键位演变的启发者
  • APACHE安装与应用