Java JVM:字节码执行引擎(六)

JVM - 字节码执行引擎 介绍JVM执行引擎相关知识;说明解释器、即时编译器工作流程; 阅读详情

执行引擎是 Java 虚拟机核心的组成部分之一,执行引擎由软件自行实现

一、运行时栈帧结构

  • Java 虚拟机以方法作为最基本的执行单元,“栈帧”则是用于支持虚拟机进行方法调用和方法执行背后的数据结构
  • 栈帧包括局部变量表、操作数栈、动态链接、方法返回地址和一些额外的附加信息
  • 在编译 Java 源码的时候,需要多大的局部变量表,多深的操作数栈已经被计算出来了,并写入了 Code 属性之中
  • 在活动线程中,只有位于栈顶顶方法才是在运行的(当前栈帧)
  • 局部变量表
    • 一组变量值的存储空间,存放方法参数和方法内部定义的局部变量,容量以变量槽为最小单位
    • 每个变量槽应占用 32 位长度的内存空间
      • 可以随着处理器、操作系统或虚拟机实现的不同而发生变化
      • 需要用对齐和补白的手段让变量槽在外观上看起来与 32 位虚拟机中一致
      • Java 虚拟机会以高位对齐的方式为其分配两个连续的变量槽空间(long、double)
  • 操作数栈
    • 操作栈,后入先出,最大深度在编译的时候被写入到 Code 属性的max_stacks 数据项中
    • Javac 编译器的数据流分析工作保证了在方法执行的任何时候,操作数栈道深度都不会超过在 max_stacks 数据项中设定的最大值
    • 刚刚开始执行时,各种字节码指令往操作数栈中写入和提取内容,也就是出栈入栈
    • 两个不同的栈帧作为不同方法的虚拟机栈元素,是相互独立的
    • Java 虚拟机的解释执行引擎被称为“基于栈道执行引擎”,栈就是操作数栈
  • 动态连接
    • 每个栈帧都包含一个指向运行时常量池中该栈帧所属方法都引用,这个引用是为了支持方法调用过程中的动态连接
    • 符号引用一部分会在类加载阶段或者第一次使用的时候就被转化为直接引用,这就是静态解析
    • 每一次运行期间都转化为直接引用,这部分就称为动态连接
  • 方法返回地址
    • 方法退出方式
      • 执行引擎遇到任意一个方法返回的字节码指令(正常调用完成)
        • 正常退出时,主调方法的 PC 计数器的值可以作为返回地址,栈帧中很可能会保存这个计数器值
      • 方法执行过程中遇到异常(异常调用完成)
        • 异常退出时,通过异常处理器表来确定的
    • 退出时可能的操作
      • 恢复上层方法的局部变量表和操作数栈,把返回值压入调用者栈帧的操作数栈中,调整 PC 计数器的值以指向方法调用指令后面的一条指令等

二、方法调用

  • 解析
    • 所有方法调用的目标方法在 Class 文件里面都是一个常量池中的符号引用
    • 在类加载的解析阶段,会将其中的一部分符号引用转化为直接引用
      • 方法在程序真正运行之前就有一个可确定的调用版本,并且这个方法的调用版本在运行期是不可改变了
  • 分派
    • 静态分派
      • 重载
    • 动态分派
      • 重写
    • 单分派和多分派
  • 动态类型语言
    • 关键特征就是它的类型检查的主体过程是在运行期而不是编译期进行的

三、基于栈的字节码解释执行引擎

  • 解释执行
    • 代码执行过程
      • javac 编译器完成了程序代码经过词法分析、语法分析道抽象语法树,再遍历语法树生成线性的字节码指令流的过程
      • 这一部分动作在 Java 虚拟机之外进行,而解释器在虚拟机内部,所以Java 程序的编译就是半独立的实现

在这里插入图片描述

  • 基于栈的指令集与基于寄存器的指令集
    • javac 编译器输出的字节码指令流,基本上是一种基于栈的指令集架构,字节码指令流里面的指令大部分都是零地址指令,他们依赖操作数栈工作
  • 基于栈的解释器执行过程

在这里插入图片描述

四、OSGI:灵活的类加载器架构

  • 基于 Java 语言的动态模块化规范
  • 在 OSGI 里面,Bundle 之间的依赖关系从传统的上层模块依赖底层模块转变为平级模块之间的依赖,而且类库的可见性能得到非常精确的控制
    • 一个模块只有被 Export 过的 Package 才可能被外界访问,其他的 Package 和 Class 将会被隐藏起来
  • OSGI 的 Bundle 类加载器之间只有规则,没有固定的委派关系
  • Bundle 类加载器为其他 Bundle 提供服务时,会根据 Export-Package 列表严格控制访问范围
    • 如果没有 Export,不会提供给其他 Bundle 使用,也不会把其他 Bundle 的类加载请求分配给这个 Bundle 来处理
虚拟机安装Centos8.5 Centos8.5 阅读详情

相关推荐

麦克风声源定位原理_声源定位—如何定位到噪声根源?

前言TPA(传递路径分析)专题系列已经开篇。其遵循方法论:源(Source)——路径(Path)——响应(Receiver)有人说TPA好,它可以识别出路径处甚至源的载荷特征,可以量化各个路径的贡献量。有人说声源定位好,不管东西南北中,“源”自其中。但是,声源定位识别出来色彩丰富的一个结果,这结果被您拿来应付工作了,还是真正帮您解决了问题?声源定位定位到了噪声的根源了么?对于一些声源现,...

weixin_39943678的博客 3973

JVM基础结构与字节码执行引擎

JVM基础结构 JVM内部结构如下:栈、堆。 栈 JVM中的栈主要是指线程里面的栈,里面有方法栈、native方法栈、PC寄存器等等;每个方法栈是由栈帧组成的;每个栈帧是由局部变量表、操作数栈等组成。 每个栈帧其实就代表一个方法 堆 java中所有对象都在堆中分配;堆中对象又分为年轻代、老年代等等,不同代的对象使用不同垃圾回收算法。 -XMs:启动虚拟机预留的内存 -Xmx:最大的堆内存 ...

程序员日记 893

(超详细)Scala环境搭建(scala-2.12.15、IDEA2021.1.3)

Scala环境搭建(scala-2.12.15、IDEA2021.1.3) JunLeon——go big or go home 目录 Scala环境搭建(scala-2.12.15、IDEA2021.1.3) 一、Scala概述 1、什么是Scala? 2、Scala发展史 3、Scala与Java的关系 二、Scala环境搭建 1、环境准备 2、Scala安装与配置环境变量 3、验证Scala 三、编写第一个Scala程序 1、使用IDEA创建maven工程 2、.

JunLeon的博客 3万+

深入了解java虚拟机(JVM) 第十三章 虚拟机字节码执行引擎

一、概述   执行引擎是java虚拟机最核心的组成部件之一。虚拟机的执行引擎由自己实现,所以可以自行定制指令集与执行引擎的结构体系,并且能够执行那些不被硬件直接支持的指令集格式。所有的Java虚拟机的执行引擎都是一致的:输入的是字节码文件,处理过程是字节码解析的等效过程,输出的是执行结果。本节将主要从概念模型的角度来讲解虚拟机的方法调用和字节码执行。 二、运行时栈帧结构   1.什么是栈帧 ...

weixin_30858241的博客 147

深度解析跨境支付之业务架构

详解跨境支付之业务架构

weixin_47493863的博客 1878

帆软报表JS导出避坑指南:如何正确处理sessionid和参数传递

本文深入探讨了帆软报表中通过JavaScript实现一键导出的关键技术,重点解析了如何正确获取并传递sessionid以确保会话不丢失,以及如何构造包含必要参数的导出URL。文章详细对比了预览后导出与直接URL导出两种方式的差异,并提供了从参数拼接、前端触发下载到高级场景(如SPA集成)的完整避坑指南,帮助开发者构建稳定可靠的自定义导出功能。

weixin_42522857的博客 162

java 执行字节码_深入理解java:1.2. 字节码执行引擎

执行引擎是Java虚拟机的核心组成部分之一。首先,想想C++和Java在编译和运行时到底有啥不一样?下图左边,C++发布的就是机器指令,而下图右边Java发布的是字节码,字节码在运行时通过JVM的类加载器,加载到JVM的虚拟内存的方法区,再通过编译器、解释器做一次转换生成机器指令。执行引擎正是执行了这样的过程:输入的是内存中的字节码,处理过程是字节码解析的 等效过程,输出的是执行结果。其次,再来看...

weixin_39998998的博客 163

Androiud安卓链接sqllite的代码使用案例

【代码】Androiud安卓链接sqllite的代码使用案例。

laterstage的博客 1328

字节码执行引擎

一、函数解析 虚拟机方法字节码 在Java语言中符合“编译期可知,运行期不可变”。这个要求的方法,主要包括静态方法和私有方法两大类,前者与类型直接关联,后者在外部不可被访问,这两种方法各自的特点决定了它们都不可能通过继承或别的方式重写其他版本,因此它们都适合在类加载阶段进行解析。 与之相对应的是,在Java虚拟机里面提供了5条方法调用字节码指令,分别如下: invokestatic ...

weixin_38910645的博客 265

微信中调起支付宝支付

微信中调用支付宝支付,首先我们知道微信是不能直接调用支付宝的,所以我们需要使用一个中间页提示用户在浏览器中打开,然后进行网页支付或打开app支付。以下为详细唤起支付宝的步骤、业务代码以及相关页面图。 如有问题欢迎评论留言,看到定回复哦^_^\(^o^)/~ 一、微信中唤起支付宝,有几个步骤: 1、中间页引导用户在浏览器中打开去唤起支付宝。 2、浏览器中打开支付宝或app中打开支付宝。 3...

han_calligrapher的博客 2万+

OpenClaw实战-行政与HR必备:AI驱动的办公自动化

智能会议纪要自动生成会议时间智能协调自动提醒和跟进简历智能筛选和匹配度分析面试安排自动化入职办理流程化通知公告一键发布发票识别和报销辅助资产管理数字化让AI处理繁杂的事务性工作,让您有更多时间专注于更有价值的战略和管理任务。

gaoxiang_120的专栏 220

【深入理解 Java 虚拟机笔记】虚拟机字节码执行引擎

执行引擎是 Java 虚拟机最核心的组成部分之一。在 Java 虚拟机规范中制定了虚拟机字节码执行引擎的概念模型,这个概念模型成为各种虚拟机执行引擎的统一外观(Facade)。不同的虚拟机实现,执行引擎可能会有解释执行和编译执行两种,有可能两种兼备。

我心中全是学习 331

PID、模糊PID、SkyHook、LQR、H2/H∞、ADRC等悬架控制合集

PID、模糊PID、SkyHook、LQR、H2/H∞等悬架控制合集

Mr.邹的博客 2013

java执行引擎是什么_JAVA虚拟机(JVM)详细介绍(六)——字节码执行引擎

JVM中的执行引擎在执行java代码的时候,一般有解释执行(通过解释器执行)和编译执行(通过即时编译器产生本地代码执行)两种选择。栈帧定义:栈帧是用于支持虚拟机进行方法调用和方法执行的数据结构,它位于虚拟机栈里面。作用:每个方法从调用开始到执行完成的过程中,都对应着一个栈帧在虚拟机栈里面从入栈到出栈的过程。特点:(1)栈帧包括了局部变量表,操作数栈等,到底是需要多大的局部变量表,多深的操作数栈是在...

weixin_32191051的博客 360

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【Java】JVM(六)虚拟机字节码执行引擎

一、概述   执行引擎是虚拟机中最核心的部分之一, 虚拟机自己实现引擎,自己定义指令集和执行引擎的结构体系。 二、栈帧   栈帧包含(1)局部变量表、(2)操作数栈、(3)动态链接、(4)方法返回地址、(5)额外的附加信息   栈顶的栈帧为当前栈帧,是唯一有效的。   2.1 局部变量表   用于存放方法参数和方法内部定义的局部变量。单位为槽(Slot),每个槽可以存放...

ZLei 222

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

java虚拟机调用字节_JAVA虚拟机(JVM)详细介绍(六)——字节码执行引擎

详细内容JVM中的执行引擎在执行java代码的时候,一般有解释执行(通过解释器执行)和编译执行(通过即时编译器产生本地代码执行)两种选择。栈帧定义:栈帧是用于支持虚拟机进行方法调用和方法执行的数据结构,它位于虚拟机栈里面。作用:每个方法从调用开始到执行完成的过程中,都对应着一个栈帧在虚拟机栈里面从入栈到出栈的过程。特点:(1)栈帧包括了局部变量表,操作数栈等,到底是需要多大的局部变量表,多深的操作...

weixin_39632291的博客 105

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

JVM执行引擎

介绍JVM执行引擎。执行引擎是Java虚拟机核心的组成部分之一。虚拟机的执行引擎由软件自行实现,物理机的执行引擎是操作系统层面上。

m0_62946761的博客 6051

《JVM系列》 第七章 -- 字节码执行引擎

执行引擎属于JVM的下层,里面包括: 解释器、及时编译器、垃圾回收器。执行引擎是Java虚拟机核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现*,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。

龙源IT 的博客 7656

JVM 执行引擎:字节码是如何被执行的

组成部分作用特点程序计数器记录当前执行指令地址每线程独立Java 栈管理方法调用栈帧入栈 / 出栈局部变量表存储参数和局部变量槽位可复用操作数栈存放中间计算结果LIFO 结构帧数据区保存上下文信息含动态连接 / 异常表栈帧重叠优化调用性能节省内存、减少拷贝JVM 执行引擎以线程私有的栈结构为核心,通过程序计数器精确定位字节码指令,依靠局部变量表与操作数栈完成数据存储与运算处理,并借助帧数据区维护方法上下文信息,同时利用栈帧重叠机制优化调用性能。

m0_73341242的博客 1783

深入JVM字节码执行引擎

我们都知道,在当前的Java中(1.0)之后,编译器讲源代码转成字节码,那么字节码如何被执行的呢?这就涉及到了JVM的字节码执行引擎,执行引擎负责具体的代码调用及执行过程。

Floating Cat 1万+

JVM的执行引擎

执行引擎、包括解释器和JIT编译器的介绍

scj1022的博客 2114

深入解析JVM字节码执行引擎

JVM字节码执行引擎核心机制 执行引擎是JVM的核心组件,负责将字节码转换为可执行操作。其核心机制包括: 栈帧管理:每个方法调用创建包含局部变量表、操作数栈等结构的栈帧 指令执行:采用基于栈的架构执行字节码,通过解释器逐条解释执行 JIT优化:对热点代码进行即时编译,使用C1/C2编译器进行多级优化 方法调用:支持静态/动态分派机制,处理不同类型的方法调用 性能优化:运用方法内联、逃逸分析等关键技术提升执行效率 执行引擎通过解释执行与即时编译相结合的方式,在保证跨平台性的同时优化性能表现。

2301_80215285的博客 1169

JVM学习-字节码执行引擎

JVM-字节码执行引擎

疼了也不哭的博客 1068

JVM:字节码执行引擎

JVM 的字节码执行引擎是 Java 程序运行的核心,字节码指令集定义了程序的执行逻辑,解释执行和编译执行的协同工作机制则在保证程序快速启动的同时,提高了程序的执行效率。深入理解字节码执行引擎的工作原理,有助于我们优化 Java 程序的性能,编写更加高效的代码。在实际开发中,我们可以通过合理的代码设计和 JVM 参数配置,充分发挥字节码执行引擎的优势,提升 Java 应用的整体性能。

jukuya的博客 1096

JVM字节码执行引擎详细解释

字节码执行引擎是JVM内用于解释和执行Java字节码的模块。Java编译器(如javac)将Java源代码编译成字节码,这些字节码被存储在.class文件中。JVM加载这些字节码文件,并使用字节码执行引擎来解释和执行其中的指令。字节码是一种中间表示形式,独立于具体的硬件和操作系统,这使得Java应用程序可以跨平台运行。JVM字节码执行引擎是Java程序执行的核心,它负责解释和执行Java字节码,通过解释执行和即时编译两种方式将字节码转换为机器码执行。

Flying_Fish_roe的博客 1149

java 虚拟机(jvm)-10-JVM 字节码执行引擎

Java虚拟机的执行引擎 输入的是字节码文件,处理过程是字节码解析的等效过程,输出的是执行结果。 本章主要是从概念模型的角度讲解虚拟机的方法调用和字节码执行。 帧栈 帧栈是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区中的虚拟机栈的栈元素。 每一个帧栈中都包括以下信息:局部变量表(Local Varable Table)、操作数栈(Operand Stack)、动态连接(D...

1万+
上一篇: Java JVM:虚拟机类加载机制(五)
下一篇: Java JVM:Java 内存模型与线程(七)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值