当前位置: 首页 > 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对象,获得虚方法表。在根据方法表找到对应的对象,获得方法的地址,最后调用方法。
在这里插入图片描述

相关文章:

JVM: 方法调用

文章目录 一、介绍二、方法调用的原理1、静态绑定2、动态绑定(1)介绍(2)原理 一、介绍 在JVM中,一共有五个字节码指令可以执行方法调用: invokestatic: 调用静态方法。invokespecial:调用对象…...

测试面试宝典(四十一)—— 接口自动化的优缺点

接口自动化测试的优点: 1. 提高测试效率:能够快速执行大量的测试用例,节省了手动测试重复执行的时间和人力成本。 2. 尽早发现问题:可以在软件开发的早期阶段介入,有助于及时发现接口层面的缺陷,降低修复…...

“火炬科企对接”先进计算产业推进会 | 麒麟信安受邀参加,并签署开源生态合作协议

7月30日,“火炬科企对接”先进计算产业推进会在长沙隆重召开。大会由工业和信息化部火炬高技术产业开发中心、湖南省科学技术厅、湖南省工业和信息化厅、湖南湘江新区管理委员会、中国邮政储蓄银行联合举办。麒麟信安与来自国内先进计算领域的专家学者,2…...

中文网址导航模版HaoWa1.3.1/模版网站wordpress导航主题

HaoWa v1.3.1由挖主题开发的一款网址导航类主题。 HaoWA主题除主体导航列表外,对主题所需的小模块都进行了开放式的HTML编辑器形式的功能配置,同时预留出默认的代码结构,方便大家在现有的代码结构上进行功能调整。 同时加入了字体图标Font …...

图欧学习资源网创站以来的更新日志(截止至2022.5.6)不完全统计

一、网站创立和初步发展 2021年10月28日创建【TUO图欧视频备份站】,当时只有【单词视频】文件夹. 小学、初中、高中、大学、四六级、专四、专八、专升本、考研、考博、托福、雅思、托业、GRE、SAT、GMAT、MBA、新概念等 数量:500个文件,60个…...

现代前端架构介绍(第二部分):如何将功能架构分为三层

远离JavaScript疲劳和框架大战,了解真正重要的东西 在这个系列的前一部分 《App是如何由不同的构建块构成的》中,我们揭示了现代Web应用是由不同的构建块组成的,每个构建块都承担着特定的角色,如核心、功能等。在这篇文章中&#…...

LeetCode Easy|【21. 合并两个有序链表】

力扣题目链接 状态:拿到本题的第一反应就是使用双指针,分别指向两个链表的开头位置。 随后的思路就是以第一条链表为基准完成插入,并且对于遍历到的每个节点都应该保存其状态。 写了一下代码后发现,我们应该以第一个节点较小的链表…...

大模型的架构参数是指定义模型基本结构和组成的各种参数,这些参数对模型的性能、训练效率和泛化能力具有重要影响。以下是对大模型架构参数的详细介绍

大模型架构参数 大模型的架构参数是指定义模型基本结构和组成的各种参数,这些参数对模型的性能、训练效率和泛化能力具有重要影响。以下是对大模型架构参数的详细介绍: 一、基本结构和组成 层数:模型的层数是指模型中全连接网络或特定结构…...

人工智能会越来越闭源——对话东北大学副教授王言治 | Open AGI Forum

作者 | Annie Xu 责编、采访 | Echo Tang 出品丨GOSIM 开源创新汇 在读期间研究方向为并不“火”的模式识别与深度学习,毕业却刚好踩上人工智能计算研究的风口……来自美国东北大学的王言治副教授深耕深度学习与大模型,前瞻性地探索大模型的本地化部署…...

【前端】(仅思路)如何在前端实现一个fc手柄,将手机作为游戏手柄设备。

文章目录 背景界面demo原型图(没错,就是它,童年回忆) 遇到的问题最终后端demo(甚至比前端逻辑更简单) 背景 突发奇想,想要在前端实现一个fc游戏手柄,然后控制电脑的nes模拟器玩玩魂斗罗。 思路很简单&…...

三十种未授权访问漏洞合集

未授权访问漏洞介绍 未授权访问可以理解为需要安全配置或权限认证的地址、授权页面存在缺陷,导致其他用户可以直接访问,从而引发重要权限可被操作、数据库、网站目录等敏感信息泄露。---->目录遍历 目前主要存在未授权访问漏洞的有:NFS服务&a…...

【Golang 面试 - 进阶题】每日 3 题(十五)

✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/UWz06 📚专栏简介:在这个专栏中,我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏…...

Java中实现文件上传

目录 1、文件上传本地 1.1 原理 1.2 如何使用文件上传 1.2.1 引入文件上传的依赖 1.2.2 配置文件上传拦截器 1.2.3 完成文件上传的代码 2、文件上传oss服务器 2.1 为什么需要上传到oss服务器 2.2 如何使用oss 2.2.1 开启oss服务 2.2.2 在Java中引入依赖 2.2.3 查看自…...

一种别样的Unicode Python编码方式,完美转换表情和阿拉伯语

我们可能有时候在处理字符时需要处理到非ASCII的字符,比如将表情、阿拉伯语转换为Unicode字符,从而避免在传输时会出现乱码的情况。 Unicode验证网站: unicode转换网站 目的:转换下面除ASCII字符外的字符为Unicode字符&#x1f…...

小白的晋升之路

编程小白如何成为大神?大学新生的最佳入门攻略 编程已成为当代大学生的必备技能,但面对众多编程语言和学习资源,新生们常常感到迷茫。如何选择适合自己的编程语言?如何制定有效的学习计划?如何避免常见的学习陷阱&…...

WebLogic:CVE-2017-10271[XML反序列化]

漏洞成因 Weblogic的WLS Security组件对外提供 webservice服务 其中使用了XMLDecoder来 解析用户传入的XML数据 在解析的过程中出现 反序列化漏洞 ,导致可执行任意命令 原理:https://xz.aliyun.com/t/10172 靶场部署 1.进入靶场目录 cd /vulhub-maste…...

Day13--JavaWeb学习之Servlet后端渲染界面

基于Day12中登录页面实现的修改,这里实现的是如果登录成功,跳到LoginSuccess页面中展示后端查询到数据库中的信息,并实现在浏览器实现插入数据和删除数据(mybaits)。 当输入账号密码正确后进入LoginSuccess页面&#x…...

【MySQL】全面剖析索引失效、回表查询与索引下推

1.索引失效的情况 以tb_user表举例,id为主键索引、name和phone字段上建立了一个普通索引,name和phone均为varchar类型。 索引列运算 当在 WHERE 子句或 JOIN 子句中对列使用函数或表达式时,索引会失效。 执行以下语句,可以发现执…...

1、爬⾍概述

1. 什么是爬虫? 爬虫(Web Crawler)是一种通过编写程序自动访问并提取互联网上数据的技术。爬虫可以帮助我们在浏览网页时自动收集和保存一些有用的数据,例如图片、视频和文本信息。简单来说,爬虫就是自动化的浏览器。…...

科普文:微服务之分布式链路追踪SkyWalking单点服务搭建

1. 概述 1.1 概念 SkyWalking 是什么? SkyWalking 极简入门 | Apache SkyWalking FROM Apache SkyWalking 分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。 提供分布式追…...

STM32F407实战:手把手教你搞定永磁同步电机FOC电流环(附示波器调试避坑指南)

STM32F407实战:永磁同步电机FOC电流环深度优化与示波器调试全攻略 在电机控制领域,永磁同步电机(PMSM)的磁场定向控制(FOC)一直是工程师们关注的焦点。而电流环作为FOC控制中最核心的环节,其性能直接影响整个系统的响应速度和稳定性。本文将基…...

PostgreSQL(OpenGauss/MogDB) 大小写转换实战:批量处理表名与字段名的自动化方案

1. 为什么PostgreSQL的大小写问题让人头疼? 第一次用PostgreSQL的时候,我就被它的大小写规则坑惨了。明明在Oracle里运行好好的SQL语句,搬到PostgreSQL就报"relation does not exist"错误。后来才发现,原来PostgreSQL对…...

三菱/安川伺服电机调试笔记:零点与原点参数设置的5个易错点

三菱/安川伺服电机调试实战:零点与原点参数设置的5个致命陷阱 伺服电机调试过程中,零点与原点的参数设置就像给精密机械赋予"空间感知"能力。三菱J4系列和安川Σ-7作为工业自动化领域的标杆产品,其调试逻辑看似简单,实则…...

Elasticsearch-05-四种搜索方案

Elasticsearch-05-四种搜索方案详解 概述 Elasticsearch提供了多种搜索方案以满足不同的业务需求。本文档将详细介绍四种核心搜索方案:纯BM25、纯KNN、混合搜索和优化KNN参数,包括各自的适用场景、配置方法和实际应用。 方案1:纯BM25搜索 场景…...

高效批处理:一键复制文件/文件夹至当前目录所有子文件夹

1. 为什么需要批量复制文件到子文件夹? 在日常工作中,我经常遇到这样的场景:需要把一个重要文件快速分发到几十甚至上百个子文件夹中。比如给每个项目文件夹添加一份新的规范文档,或者为所有客户目录更新同一份合同模板。手动操作…...

如何用OpenDroneMap免费实现无人机三维重建?3种快速上手方法

如何用OpenDroneMap免费实现无人机三维重建?3种快速上手方法 【免费下载链接】ODM A command line toolkit to generate maps, point clouds, 3D models and DEMs from drone, balloon or kite images. 📷 项目地址: https://gitcode.com/gh_mirrors/o…...

Mermaid CLI深度技术解析:如何构建企业级图表自动化流水线

Mermaid CLI深度技术解析:如何构建企业级图表自动化流水线 【免费下载链接】mermaid-cli Command line tool for the Mermaid library 项目地址: https://gitcode.com/gh_mirrors/me/mermaid-cli Mermaid CLI作为文本图表转换的命令行工具,正在成…...

告别传统BPMN:wflow工作流设计器如何让普通员工5分钟搭建审批流程?

告别传统BPMN:wflow工作流设计器如何让普通员工5分钟搭建审批流程? 【免费下载链接】wflow workflow 工作流设计器,企业OA流程设计。表单流程设计界面操作超级简单!!普通用户也能分分钟上手,不需要专业知识…...

手把手教你用Python实现双足机器人ZMP预观控制(附开源代码)

用Python实现双足机器人ZMP预观控制的完整指南 1. ZMP理论基础与机器人动力学模型 零力矩点(ZMP)理论是现代双足机器人步态规划的核心概念,它定义了地面反作用力合力作用点的位置。当ZMP位于支撑多边形(由机器人足底接触点构成的凸多边形)内时,机器人能保…...

告别龟速下载!手把手教你用Aspera ascp命令高效获取SRA数据(附常见错误排查)

告别龟速下载!手把手教你用Aspera ascp命令高效获取SRA数据(附常见错误排查) 在生物信息学研究中,获取公共数据库中的测序数据是许多分析的第一步。然而,传统的FTP下载方式往往速度缓慢,尤其是当需要下载大…...