首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏开源君

    JVM-执行引擎

    JVM底层原理解析及知识点整理已开源: Githubi地址 JVM执行引擎 执行引擎概述 执行引擎是Java虚拟机的核心组成部分之一。 虚拟机是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而==虚拟机的执行引擎则是由软件自行实现==的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系 简单来说,JVM中的执行引擎充当了将高级语言翻译为机器语言的译者. Java代码编译是由Java源码编译器来完成的 [jto4v7y59k.png] Java字节码的执行是由JVM执行引擎来完成的 [0uagiqszug.png] 解释器 当Java虚拟机启动时会根据预定义的规范对字节码采用逐行解释的方式执行 现在JVM执行Java代码的时候,通常都会将解释执行与编译执行二者结合起来进行。

    1K41发布于 2021-07-14
  • 来自专栏springboot

    JVM执行引擎

    1、执行引擎概述 执行引擎属于JVM的下层,里面包括:解释器、即时编译器、垃圾回收器 执行引擎是Java虚拟机核心的组成部分之一。 “虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系 简单来说,JVM中的执行引擎充当了将高级语言翻译为机器语言的译者。 执行引擎工作过程 执行引擎执行的过程中究竟需要执行什么样的字节码指令完全依赖于PC寄存器。 (解释执行)和蓝色(即时编译)才是JVM需要考虑的过程 Java代码编译是由Java源码编译器来完成,流程图如下所示: Java字节码的执行是由JVM执行引擎来完成,流程图如下所示: 我们用一个总的图, 现在JVM执行Java代码的时候,通常都会将解释执行与编译执行二者结合起来进行。

    52600编辑于 2025-01-20
  • 来自专栏java学习java

    jvm执行引擎解读

    执行引擎概述 执行引擎属于JVM的下层,里面包括解释器、及时编译器、垃圾回收器,执行引擎是Java虚拟机核心的组成部分之一。 “虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系 简单来说,JVM中的执行引擎充当了将高级语言翻译为机器语言的译者。   执行引擎的工作流程 执行引擎执行的过程中究竟需要执行什么样的字节码指令完全依赖于PC寄存器。 Java字节码的执行是由JVM执行引擎(后端编译器)来完成,流程图如下所示:   什么是解释器(Interpreter)? 现在JVM执行Java代码的时候,通常都会将解释执行与编译执行二者结合起来进行。

    52030编辑于 2023-10-15
  • 来自专栏技术趋势

    JVM执行引擎(Execution Engine)

    上文:JVM-直接内存(Direct Memory) ? 历史: ? 在了解执行引擎前先了解一下计算机的语言的发展历史。如下: 机器码? 也就是说随着软硬件的发展,从机器码->指令(指令集)->汇编语言->高级语言,慢慢接近现在的语言以及大的提升了生产和工作的效率,了解了以上你才发现,原来jvm执行引擎其实只是高级语言的一个翻译过程。 什么是jvm执行引擎执行引擎JVM的核心组成部分之一,主要用来执行Java生成.class的字节码,解析成各种cpu所能执行的二进制指令。 因为JVM加载字节码相关指令后,这些字节码指令、符号表和其他辅助信息无法被操作系统直接识别运行,所以就需要执行引擎来实现。 最后 JVM执行引擎JVM的核心功能,主要起到翻译工作,当然有直接翻译和间接翻译(JIT),起到非常关键的作用,通过热点探测进行统计是否通过编译器进行生成系统可执行的机器码,对后续相关的对象逃逸也跟此内容关联极大

    1.4K20发布于 2021-07-05
  • 来自专栏知了一笑

    深入分析JVM执行引擎

    咱们的执行引擎就类似于这部“翻译机”。 二、概述 执行引擎的作用就是将字节码指令解释或者编译为对应平台上的本地机器指令。简单来说,执行引擎充当了将高级语言翻译为机器语言的翻译者。 对于Hotspot虚拟机,执行引擎中包含两部分:解释器和JIT编译器(即时编译器)。 下图是执行引擎的原理: 三、解释器 解释器所承担的角色就是一个运行时翻译者,将字节码文件中的内容翻译为对应平台的本地机器码指令。 当一条字节码指令被解释执行后,接着再根据pc寄存器中记录的下一条需要被执行的字节码指令执行解释操作。JVM解释器一共有两套,一套是远古的字节码解释器,另一套是现在普遍使用的模板解释器。 六、执行引擎执行程序的方式 在默认的情况下,HotSpot VM采用的是解释器和JIT编译器并存的架构,当然读者可以根据具体的应用场景,通过虚拟机参数,为虚拟机指定在运行时到底是完全采用解释器执行,还是完全采用即时编译器执行

    73720编辑于 2022-11-30
  • 来自专栏LearnPath

    JVM之字节码执行引擎

    概述 在Java中,编译器讲源代码转成字节码,那么字节码如何被执行的呢?这就涉及到了JVM的字节码执行引擎执行引擎负责具体的代码调用及执行过程。就目前而言,所有的执行引擎的基本一致: 1. 输出:执行结果。 物理机的执行引擎是由硬件实现的,和物理机的执行过程不同的是虚拟机的执行引擎由于自己实现的。 另外我们说Java虚拟机的解释引擎是基于栈的执行引擎,其中的栈指的就是操作数栈。 两个栈帧作为虚拟机栈的元素,是完全相互独立的。 JVM实现动态分派 动态分派在Java中被大量使用,使用频率及其高,如果在每次动态分派的过程中都要重新在类的方法元数据中搜索合适的目标的话就可能影响到执行效率,因此JVM在类的方法区中建立虚方法表来提高性能 方法表的结果如下图所示: 字节码解释执行引擎 许多java虚拟机的执行引擎执行java的时候都有解释执行(通过解释器执行)和编译执行(通过即时编译器产生本地代码执行)两种选择。

    52920编辑于 2022-09-08
  • 来自专栏深入浅出JVM

    深入浅出JVM(七)之执行引擎的解释执行与编译执行

    深入浅出JVM(七)之执行引擎的解释执行与编译执行 本篇文章围绕执行引擎,深入浅出的解析执行引擎中解释器与编译器的解释执行和编译执行执行引擎执行方式、逃逸分析带来的栈上分配、锁消除、标量替换等优化以及即时编译器编译对热点代码的探测 执行引擎 hotspot执行引擎结构图 执行引擎分为解释器、JIT即时编译器以及垃圾收集器 执行引擎通过解释器/即时编译器将字节码指令解释/编译为对应OS上的的机器指令 图片 本篇文章主要围绕解释器与即时编译器 Class文件中的代码到底是解释执行还是编译执行只有Java虚拟机自己才能判断准确 编译过程 编译流程在前一篇文章深入浅出JVM之前端编译过程与语法糖原理已经说明,在本篇文章中不再概述 经典编译原理: 缺点: 程序启动时,需要先编译再执行 执行引擎执行方式 执行引擎执行方式大致分为3种 -Xint: 完全采用解释器执行 -Xcomp: 优先采用即时编译器执行,解释器是后备选择 -Xmixed: 采用解释器 ;最后都没有就使用解释执行 总结 本篇文章将围绕执行引擎,深入浅出的解析执行引擎中的解释器、即时编译器各自执行的优缺点以及原理 执行引擎由解释器、即时编译器、垃圾收集器构成,默认情况下使用解释器与编译器的混合方式执行

    41021编辑于 2024-10-10
  • 来自专栏同步文章

    jvm之虚拟机字节码执行引擎(六)

    虚拟机字节码执行引擎 运行时栈帧结构 • 局部变量表 • 操作数栈 • 动态链接 • 方法返回地址 • 附加信息 局部变量表 • slot 32 64 • 数据类型:byte boolean package jvm; /** * 动态链接 */ public class Demo3 { static class Super{ public void test 这类方法的调用被称为解析(Resolution) • 静态方法、构造器、私有方法,final修饰的方法 分派调用 静态分派 package jvm; /** * 静态分派示例 */ public $Sub2 // 11: dup // 12: invokespecial #10 // Method jvm/Demo02 Super c2 = new Sub2(); c1.test(); c2.test(); } } 运行结果: Sub1 Sub2 在运行期根据实际类型确定方法执行版本的分派过程称为动态分派

    34120编辑于 2022-10-25
  • 来自专栏悠扬前奏的博客

    JVM-11. 虚拟机字节码执行引擎

    JVM-11. 虚拟机字节码执行引擎 1 运行时栈帧 栈帧(Stack Frame)是用于支持虚拟机进行方法调用和方法执行的数据结构。 执行引擎运行的所有字节码指令都只针对当前栈帧操作。 ,两种方法退出: 执行引擎遇到任意一个方法返回的字节码指令,此时可能有返回值传递给上层方法调用者,被称为正常完成出口(Normal Method Invocation Completion) 在方法执行过程中遇到异常 并且异常没有在方法体内得到处理,被称为异常完成出口(Abrupt Method Invocation Completion),这种方法退出不会传递给上层调用者任何返回值 方法退出过程实际上等同于把当前栈帧出栈 1.5 附加信息 JVM 规范允许JVM增加一下额外信息到栈帧中,例如调试相关的信息 2.

    61240发布于 2019-05-28
  • 来自专栏HAUE_LYS'Blog

    深入理解 JVM 之——字节码指令与执行引擎

    虚拟机字节码执行引擎 执行引擎概述 我们在 Java 内存模型的篇章已经介绍了虚拟机的运行时区域,不熟悉的朋友可以快速回顾一番 深入理解 JVM 之——Java 内存区域与溢出异常。 那么现在我们应该来讲讲执行引擎了——执行引擎是Java虚拟机核心的组成部分之一。 执行引擎(Execution Engine):负责执行加载到内存中的字节码指令,将其转换为机器码并执行。 在《Java虚拟机规范》中制定了Java虚拟机字节码执行引擎的概念模型,在不同的虚拟机实现中,执行引擎执行字节码的时候,通常会有解释执行(通过解释器执行)和编译执行(通过即时编译器产生本地代码执行)两种选择 ,也可能两者兼备,还可能会有同时包含几个不同级别的即时编译器一起工作的执行引擎。 所有的 Java 虚拟机的执行引擎输入、输出都是一致的:输入的是字节码二进制流,处理过程是字节码解析执行的等效过程,输出的是执行结果。

    76030编辑于 2023-09-07
  • 来自专栏Open软件开发小组

    简述JVM基础(六):虚拟机字节码执行引擎

    一、前言 物理机的执行引擎是直接在物理硬件如CPU、操作系统、指令集上运行的,但是对于虚拟机来讲,他的执行引擎由自己实现。 执行引擎有统一的外观(Java虚拟机规范),不同类型的虚拟机都遵循了这一规范,输入字节码文件,解析字节码处理,然后输出结果。 二、运行时栈帧结构 ? 局部变量表大小(max_locals),栈帧深度在编译时已经确定,并写入到了Code属性中; 执行引擎运行的所有字节码指令都只针对当前栈进行操作; 2、局部变量表 局部变量表存储了方法参数以及方法内定义的局部变量 Java虚拟机的解释执行引擎也是:基于栈的执行引擎; 4、动态连接(Dynamic Linking) 字节码中的方法的调用都是通过常量池中指定方法的符号作为参数 静态解析:这种符号有的是类加载阶段或者首次使用初始化的时候转化为直接的引用 首先记住,JVM是基于栈的执行引擎。栈有着先入后出的特点,执行引擎的指令也仅执行当前栈。

    87210发布于 2020-03-19
  • 来自专栏一只程序原

    JVM内存与垃圾回收篇第12章执行引擎

    第 12 章 执行引擎 1、执行引擎概述 执行引擎位置 执行引擎属于JVM的下层,里面包括:解释器、即时编译器、垃圾回收器 1.1、执行引擎概述 执行引擎概述 执行引擎是Java虚拟机核心的组成部分之一 “虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系 简单来说,JVM中的执行引擎充当了将高级语言翻译为机器语言的译者。 1.2、执行引擎工作过程 执行引擎工作过程 执行引擎执行的过程中究竟需要执行什么样的字节码指令完全依赖于PC寄存器。 (javac 指令),和JVM无关 后面绿色(解释执行)和蓝色(即时编译)才是JVM需要考虑的过程 Java代码编译是由Java源码编译器来完成,流程图如下所示: Java字节码的执行是由JVM执行引擎来完成 现在JVM执行Java代码的时候,通常都会将解释执行与编译执行二者结合起来进行。

    57420编辑于 2022-08-17
  • 来自专栏c++与qt学习

    JVM第七卷---虚拟机字节码执行引擎

    JVM第七卷---类加载机制 概述 运行时栈帧结构 局部变量表 操作数栈 动态链接 方法返回地址 方法调用 解析 分派 静态分派 动态分派 单分派与多分派 虚拟机动态分派的实现原理 基于栈的字节码解释引擎 ,缓存,指令集和操作系统层面的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件限制定制指令集与执行引擎结构体系,能够执行哪些不被硬件直接支持的指令集格式。 在《JAVA虚拟机规范》中规定了Java虚拟机字节码执行引擎的概念模型,这个概念模型成为了各大发行商JAVA虚拟机执行引擎的统一外观。 执行引擎执行字节码时,通过有解释执行(通过解释器执行)和编译执行(通过及时编译器产生本地代码执行)两种选择,或者二者兼备,还可能同时包含几个不同级别的及时编译器一起工作的执行引擎。 但是从外观上看,所有的java虚拟机执行引擎输入,输出都是一致的:输字节码的二进制流,处理过程是字节码解析执行的等效过程,输出的是执行结果。

    52510编辑于 2022-05-10
  • 来自专栏光城(guangcity)

    Zombodb执行引擎

    Zombodb执行引擎不像PG那样复杂,能搞若干年,Zombodb的执行引擎简单用一幅图概括其核心工作。 2.执行引擎 接下来就是Zombodb执行引擎的结构了,内部包括: 每个表的元组描述符 元组描述符在这里表示你查询的时候的某些列信息。 事务回滚:abort,给ES Bulk发起立刻终止请求并释放执行引擎的所有成员占用的内存。 单独还放到了执行引擎里面,像其他的zdb查询缺没有放到执行引擎里面,例如: zdb.terms 要回答这个问题,首先我们需要知道这两个函数的实现入参都有一个ctid,而根据Zombodb代码中的注释与调用入口 ,可以发现这两个放到执行引擎里面,是为了方便解决HOT问题。

    48810编辑于 2023-02-28
  • 来自专栏桥路_大数据

    执行&查询引擎

    执行&查询引擎 Hive On Spark 基本概述 Hive支持使用Spark作为底层执行引擎,以获得比MapReduce更快的处理性能。

    62520发布于 2021-09-10
  • 来自专栏InvQ的专栏

    JVM底层执行原理

    上面的app.class 字节码文件是如何加载到JVM运行数据区中呢? 大家应该听说过 双亲委派机制吧,其中classloader的工作就干了这个事情。 JVM 运行数据区 从线程的角度,JVM 运行数据区可以分为线程共享和线程私有。 其中堆和元空间,存在的数据时共享的,那么并发的问题就会在这这两个区域发生。而线程私有区域是不会发生。

    49421发布于 2020-10-26
  • 来自专栏阿甘的码路2

    虚拟机字节码执行引擎JVM的马达图,是爱情呀

    JVM整体架构 字节码执行引擎 方法调用 局部变量表 操作数栈 动态连接 方法返回地址 附加信息 基于栈的字节码解释执行引擎 JVM整体架构 首先我们要知道,虚拟机是相对于物理机而言,这点毋庸置疑。 冒然的讲执行引擎可能会觉得这个东西很突兀,让我们来简单回顾一下JVM的架构图,看看执行引擎所处的位置: ? JVM架构图简易版 我们要讲的也就是这个执行器,引擎那就是汽车的马达,得让整个汽车或者虚拟机动起来啊,前面类加载和运行时数据区做了那么多的前面准备工作,都是为了执行做铺垫。 我们的 JVM虚拟机 也是这种思路,前面的类加载初始化等过程,都是在为执行做准备,jvm执行引擎才是JVM运转的灵魂,所有的Java虚拟机的执行引擎都是: 输入的是字节码文件; 处理过程是字节码解析的过程 基于栈的字节码解释执行引擎 JVM是混合方式,即解释执行和编译执行的两种方式的,我们主要看解释执行。 ?

    90130发布于 2020-09-18
  • 来自专栏每天学Java

    Java底层-执行引擎

    ,然后由类加载器将相应的字节码文件加载到虚拟机内存中,最后找到程序执行入口的main函数, 由JVM创建的main线程调用main函数(线程为执行引擎的的一个实例,并为该线程绑定程序计数器,虚拟机栈), 的实例」,所以JVM实例对应一个独立的Java进程,而在JVM执行引擎实例则对应了属于运行程序的线程,所以有时候我们会认为线程为执行引擎的的一个实例,这种说法可能并不准确,但是每一个Java线程的运行都会伴随着执行引擎执行过程 在JVM执行引擎通常又是如何去执行字节码呢? 在我们物理机中,指令的执行建立在cpu、硬件、指令集、操作系统的层面,而在JVM规范中制定了虚拟机字节码执行引擎的概念模型,这个概念模型作为具体的JVM的外观模型(Facade)。 上面我们说过线程的运行都会伴随这执行引擎执行的过程,而线程需要执行的方法都存储在虚拟机栈中,而执行引擎需要执行程序就是当前虚拟机栈的栈顶栈帧,在上一节谈及虚拟机栈的时候我们谈过栈帧(Stack Frame

    1.5K40发布于 2020-07-15
  • 来自专栏吉林乌拉

    字节码执行引擎

    加载class的功能是由类加载器实现的,那么执行其中字节码的功能就是由字节码执行引擎执行的。下图为虚拟机的基本结构图。 ? 虚拟机的执行引擎有很多种,不同的执行引擎也有很大的差别,它们主要的区别如下: 最简单的执行引擎是一次性解释字节码。 另一种执行引擎叫做即使编译器,但会很消耗内存。 执行引擎会把第一次执行的字节码编译成本地机器代码,本地机器代码会被缓存,当方法第二次调用时可以直接使用缓存中的本地机器代码,提高程序的运行效率。 还有一种执行引擎叫自适应优化器 。 执行引擎是由硬件芯片构成,它用本地代码执行字节码。 上面所说的都是不同执行引擎的的执行特性,但无论是哪一种执行引擎其中最基本的功能都是执行字节码。 其实对于执行引擎来说,在活动的线程中,只有位于栈顶的栈帧才是有效的,它被称之为当前栈帧,和这个栈帧相关联的方法称为当前方法。 执行引擎运行时的字节码指令都是针对当前栈帧进行操作的。

    78520发布于 2019-08-14
  • 来自专栏shysh95

    Flin Runtime执行引擎

    作业提交运行过程 Flink 资源管理 Flink Share Slot Flink 作业调度 Flink 错误恢复 Flink整体架构 Flink整体架构从下自上分为: 物理资源层 Runtime统一执行引擎 API层 High-level API层 Flink可以运行在多种不同的环境中: 单进程、多线程运行 Yarn集群 K8S集群 各种云环境 针对不同的运行环境,Flink提供了一套统一的分布式作业引擎 的资源是通过Slot进行描述,一个Slot一般可以执行1个具体的Task,但在一些情况下可以执行多个相关联的Task。 TaskExecutor收到JobManager提交的Task后,会启动一个新的线程执行该Task,Task启动后就开始进行计算,并通过数据Shuffle模块互相交换数据。 JobManager的Task的话,它会与相应的JobManager建立连接,发起提供Slot的RPC请求(6. offset) 当Task执行结束以后,都会通知JobManager其自身的执行状态,然后在

    65330编辑于 2022-10-31
领券