首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

字节执行引擎

在上一篇我们介绍了类加载器的相关功能,在这一篇中我们在分享一下虚拟机中的另一个非常重要的功能字节执行引擎。我们知道Java虚拟机的主要任务就是加载class文件并执行其中的字节。...加载class的功能是由类加载器实现的,那么执行其中字节的功能就是由字节执行引擎执行的。下图为虚拟机的基本结构图。 ?...虚拟机的执行引擎有很多种,不同的执行引擎也有很大的差别,它们主要的区别如下: 最简单的执行引擎是一次性解释字节。 另一种执行引擎叫做即使编译器,但会很消耗内存。...执行引擎会把第一次执行字节编译成本地机器代码,本地机器代码会被缓存,当方法第二次调用时可以直接使用缓存中的本地机器代码,提高程序的运行效率。 还有一种执行引擎叫自适应优化器 。...执行引擎是由硬件芯片构成,它用本地代码执行字节。 上面所说的都是不同执行引擎的的执行特性,但无论是哪一种执行引擎其中最基本的功能都是执行字节

54420

JVM之字节执行引擎

概述 在Java中,编译器讲源代码转成字节,那么字节如何被执行的呢?这就涉及到了JVM的字节执行引擎执行引擎负责具体的代码调用及执行过程。就目前而言,所有的执行引擎的基本一致: 1....输入:字节文件 2. 处理:字节解析 3. 输出:执行结果。 物理机的执行引擎是由硬件实现的,和物理机的执行过程不同的是虚拟机的执行引擎由于自己实现的。...执行引擎运行的所有字节指令只针对当前栈帧进行操作。其模型示意图大体如下: 局部变量表 局部变量表是变量值的存储空间,由方法参数和方法内部定义的局部变量组成,其容量用Slot作为最小单位。...执行引擎遇到任意一个方法返回的字节指令,也就是所谓的正常完成出口。 2....方法表的结果如下图所示: 字节解释执行引擎 许多java虚拟机的执行引擎执行java的时候都有解释执行(通过解释器执行)和编译执行(通过即时编译器产生本地代码执行)两种选择。

31420
您找到你想要的搜索结果了吗?
是的
没有找到

虚拟机字节执行引擎

所谓的「虚拟机字节执行引擎」其实就是 JVM 根据 Class 文件中给出的字节指令,基于栈解释器的一种执行机制。通俗点来说,也就是 JVM 解析字节指令,输出运行结果的一个过程。...方法调用的本质 在描述「字节执行引擎」之前,我们先从汇编层面看看基于栈帧的方法调用是怎样的。...subl 指令将寄存器 %esp 中的地址减去 20,即栈指针向上扩展了 20 个字节(栈是倒着生长的),也就是为当前栈帧分配了 20 个字节大小。...我们的编译器在生成字节指令的时候会根据变量的静态类型选择调用合适的方法。就我们上述的例子而言: ?...son = new Son(); son.sayHello(); } 输出结果: hello world ---- son 显然,最终调用了子类的 sayHello 方法,我们看生成的字节指令调用情况

49040

虚拟机字节执行引擎

所谓的「虚拟机字节执行引擎」其实就是 JVM 根据 Class 文件中给出的字节指令,基于栈解释器的一种执行机制。通俗点来说,也就是 JVM 解析字节指令,输出运行结果的一个过程。...方法调用的本质 在描述「字节执行引擎」之前,我们先从汇编层面看看基于栈帧的方法调用是怎样的。...subl 指令将寄存器 %esp 中的地址减去 20,即栈指针向上扩展了 20 个字节(栈是倒着生长的),也就是为当前栈帧分配了 20 个字节大小。...我们的编译器在生成字节指令的时候会根据变量的静态类型选择调用合适的方法。...Father son = new Son(); son.sayHello(); } 输出结果: hello world ---- son 显然,最终调用了子类的 sayHello 方法,我们看生成的字节指令调用情况

94180

字节原理浅析 —— 基于栈的执行引擎

字节是运行在 JVM 上的,为了能弄懂字节,需要对 JVM 的运行原理有所了解。这篇文章将以栈帧为切入点理解字节在 JVM 上执行的细节。...举一个计算两数相加的例子:c = a + b 基于 HotSpot JVM 的源码和字节如下 源码 void bar(int a, int b) { int c = a + b; } 对应字节...为了理解字节的细节,我们需要详细了解字节执行过程。众所周知,Hotspot JVM 是一个基于栈的虚拟机,每个线程都有一个虚拟机栈,存储了「栈帧」。每次方法调用都伴随着栈帧的创建销毁。...比如我们要执行calculator.record(score1),对应的字节如下 12: aload_1 13: iload_2 14: i2d 15: invokevirtual #4 // Method...(局部变量表、操作数栈、指向运行时常量池的引用),顺带讲解了 javap -l 参数和其在局部变量表中的应用; 第三,从类文件二进制角度看字节的实现,并引出 ASM 字节改写技术。

33330

虚拟机字节执行引擎

虚拟机字节执行引擎 1 运行时栈帧 栈帧(Stack Frame)是用于支持虚拟机进行方法调用和方法执行的数据结构。...执行引擎运行的所有字节指令都只针对当前栈帧操作。...最大深度在编译时写入到Code属性的max_stacks数据项中 操作数栈中的元素是任意的Java数据类型 操作数栈中的元素数据类型必须和字节指令的序列严格匹配 虚拟机可能对栈帧作出一些共享,让下面栈帧的操作数栈帧和上面栈帧的部分局部变量表重合...: 执行引擎遇到任意一个方法返回的字节指令,此时可能有返回值传递给上层方法调用者,被称为正常完成出口(Normal Method Invocation Completion) 在方法执行过程中遇到异常...方法调用 方法调用不等于方法执行,调用的唯一任务是确定调用方法的版本。

46340

Java方法调用(虚拟机字节执行引擎)

JAVA方法调用属于虚拟机字节执行引擎的一部分,执行引擎,可以简单的理解为它用来接收输入的Class文件,按照字节进行处理程序,然后输出执行结果。...我们在如何找个对象中已经讲述了关于方法调用的指令,那么今天我们就看一下方法调用的时候虚拟机引擎会做哪些事。 1....这里不牵涉方法的执行。 2. 如何确定方法 如何确定方法大致有两种方式: 解析 分派 解析是发生在编译阶段即可确定方法的版本,然后在类加载的连接阶段中的解析步骤将符号引用替换为直接引用。...静态分派发生在编译阶段,因此并不是由虚拟机执行的,编译器在确定方法版本的时候会选取于一个最合适的版本。...我们主要看一下12:invokevirtual,这一行字节实际就是下面这行代码的字节指令: woman.print(); 之多以能产生多态(动态分派),需要从invokevirtual的运行过程来进行分析

33720

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

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

43030

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

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

65510

深入理解Java虚拟机(字节执行引擎

在 Java 虚拟机规范中制定了虚拟机字节执行引擎的概念模型,这个概念模型成为各种虚拟机执行引擎的统一外观(Facade)。...但从外观上来看,所有 Java 虚拟机的执行引擎是一致的:输入的是字节文件,处理过程是字节解析的等效过程,输出的是执行结果。 一....执行引擎运行的所有字节指令对当前栈帧进行操作,在概念模型上,典型的栈帧结构如下图: ?...一种是执行引擎遇到任意一个方法返回的字节指令,这时候可能会有返回值传递给上层方法的调用者,是否有返回值和返回值的类型将根据遇到何种方法返回指令来决定,这种退出方法的方式称为正常完成出口。...基于栈的字节解释执行引擎 虚拟机如何调用方法已经介绍完了,下面我们来看看虚拟机是如何执行方法中的字节指令的。

60330

JAVA 虚拟机类加载机制和字节执行引擎

引言 我们知道java代码编译后生成的是字节,那虚拟机是如何加载这些class字节文件的呢?加载之后又是如何进行方法调用的呢?...这里要注意的是,虚拟机也是中立的,只要是符合规范的字节,都可以被虚拟机接受,例如Groovy,JRuby等语言,都会生成符合规范的字节,然后被虚拟机所运行,虚拟机不关心字节由哪种语言生成。...三 字节执行引擎 运行时栈帧结构 http://segmentfault.com/a/1190000002931555 中讲到虚拟机栈是线程私有的,线程中会为运行的方法创建栈帧。 ?...基于栈的字节执行引擎 不管是解释型语言还是编译型语言,机器都无法理解非二进制语言。高级语言转化成机器语言都遵循现代经典编译原理。即执行前对程序源码进行词法和语法分析,构建抽象语法树。...C语言等编译型语言会由单独的执行引擎做这些工作,而Java语言等解释型语言语法抽象树由jvm完成。jvm可以选择通过解释器来解释字节执行还是通过优化器生成机器代码来执行

86410

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

在《JAVA虚拟机规范》中规定了Java虚拟机字节执行引擎的概念模型,这个概念模型成为了各大发行商JAVA虚拟机执行引擎的统一外观。...执行引擎执行字节时,通过有解释执行(通过解释器执行)和编译执行(通过及时编译器产生本地代码执行)两种选择,或者二者兼备,还可能同时包含几个不同级别的及时编译器一起工作的执行引擎。...但是从外观上看,所有的java虚拟机执行引擎输入,输出都是一致的:输字节的二进制流,处理过程是字节解析执行的等效过程,输出的是执行结果。...与该栈帧关联的方法被称为当前方法,执行引擎运行的字节指令都只对当前栈帧进行操作。...---- 基于栈的字节解释引擎 下面重点分析一下虚拟机如何执行方法里面的字节指令的 解释执行 java语言常被认为是解释执行的语言,这种说法在jdk1时代还算靠谱,但是当前虚拟机包含了及时编译器后,

28410

重载和重写的底层原理——虚拟机字节执行引擎

虚拟机字节执行引擎 代码编译的结果从本地机器转变为字节,是存储格式发展的一小步,却是编程语言发展的一大步。...执行引擎所运行的所有字节指令都只 针对当前栈帧进行操作,在概念模型上,典型的栈帧结构如图8-1所示。...8.2.4 方法返回地址 当一个方法开始执行后,只有两种方式退出这个方法。 第一种方式是执行引擎遇到任意一个方法 返回的字节指令,这时候可能会有返回值传递给上层的调用者。...概述中曾提到过,许多Java虚拟机的执行引擎执行Java代码的时候都有解释执行(通过解释器执行)和编译执行(通过即时编译器产生本地代码执行)两种选择,在本节中,我们将会分析在概念模型下的Java虚拟机解释执行字节时...8.5.3 基于栈的解释器执行过程(重点!!!) 关于栈架构执行引擎的必要前置知识已经全部讲解完毕了,本节笔者准备了一段Java代码以便向读者实际展示在虚拟机里字节是如何执行的。

28420

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

JVM整体架构 字节执行引擎 方法调用 局部变量表 操作数栈 动态连接 方法返回地址 附加信息 基于栈的字节解释执行引擎 JVM整体架构 首先我们要知道,虚拟机是相对于物理机而言,这点毋庸置疑。...我们的 JVM虚拟机 也是这种思路,前面的类加载初始化等过程,都是在为执行做准备,jvm执行引擎才是JVM运转的灵魂,所有的Java虚拟机的执行引擎都是: 输入的是字节文件; 处理过程是字节解析的过程...; 输出的是执行结果; 字节执行引擎 ?...字节执行引擎模型 那么问题来了,Java虚拟机是编译执行还是解释执行? ?...基于栈的字节解释执行引擎 JVM是混合方式,即解释执行和编译执行的两种方式的,我们主要看解释执行。 ?

70330

深入理解JVM虚拟机5:虚拟机字节执行引擎

虚拟机的执行引擎由自己实现,所以可以自行定制指令集与执行引擎的结构体系,并且能够执行那些不被硬件直接支持的指令集格式。...所有的Java虚拟机的执行引擎都是一致的:输入的是字节文件,处理过程是字节解析的等效过程,输出的是执行结果。本节将主要从概念模型的角度来讲解虚拟机的方法调用和字节执行。...2.4 方法返回地址 当一个方法被执行后,有两种方式退出这个方法: 第一种是执行引擎遇到任意一个方法返回的字节指令,这种退出方法的方式称为正常完成出口(Normal Method Invocation...4 基于栈的字节解释执行引擎 虚拟机如何调用方法的内容已经讲解完毕,现在我们来探讨虚拟机是如何执行方法中的字节指令。...栈架构指令集的主要缺点是执行速度相对来说会稍微慢一些。 总结 本节中,我们分析了虚拟机在执行代码时,如何找到正确的方法、如何执行方法内的字节,以及执行代码时涉及的内存结构。

53110

JVM在执行字节时是基于栈的执行引擎,了解它的工作机制以及数据结构

JVM执行引擎的工作机制当JVM执行字节时,它使用一种基于栈的执行引擎。这意味着JVM将所有操作数和操作指令存储在一个称为操作数栈的数据结构中。工作机制如下:JVM通过解析字节指令逐条执行程序。...在执行方法时,每个字节指令将从当前帧的操作数栈中获取操作数,并在执行结束后将结果推回操作数栈。当方法执行结束时,相应的帧就会从帧栈中弹出。这种基于栈的执行引擎的优点是灵活性和简洁性。...此外,基于栈的执行引擎相对较简单,易于实现和调试。不过,基于栈的引擎可能会导致性能相对较低,因为频繁的栈操作可能会带来额外的开销。...每个方法在JVM中执行时都会有一个对应的栈帧随之创建并入栈,并在方法执行完毕后出栈。...在Java字节中,局部变量的访问基于索引的方式,索引从0开始计数。局部变量表可以存储各种类型的变量,包括原始类型(如int、float等)和引用类型(如对象引用)。

24251

Java 类机制(4)---- 字节和方法执行

对照 4 个字段的含义翻译过来就是:如果在执行方法的第 0 行到第 10 行(不包括 10)字节中发生了 NullPointerException 及其子类的异常,则跳转到第 7 行字节继续执行。...结合字节,我们可以很容易的总结出方法的运行规则: 尝试执行 0~6 这几行字节,如果这个过程中发生了 NullPointerException 异常,则跳转到第 10 行字节执行,否则会顺序执行到第...如果跳转到第 10 行,证明在 0 ~ 6 行字节执行过程中发生了 NullPointerException 异常,此时会顺序执行第 10,、11、12、15 行字节,也就是将异常信息打印后退出方法的执行...方法的执行 从上面的内容中我们已经知道 Java 类中方法中的代码经过编译器编译后会作为字节储存在 method_info 中的额外属性 Code 表中,也就是说我们写的 Java 代码在虚拟机执行的时候是执行一行行的字节...这样虚拟机在碰见对应的数据值的时候就可以通过这个映射表来找到对应的字节执行。因为数据值的占用的大小是一个字节,因此最多可以有 256 个字节(2^8)。

49720

《深入理解Java虚拟机》读书笔记(七)–虚拟机字节执行引擎(下)

《深入理解Java虚拟机》读书笔记(七)--虚拟机字节执行引擎(下) 一、Java动态类型语言支持 动态类型语言的关键特征是它的类型检查的主体过程是在运行期而不是编译期,满足这个特征的语言有很多,...由于MethodHandle是对字节的方法执行指令的模拟,所以理论上虚拟机在这方面做的各种优化(比如方法内联),在MethodHandle上也应当可以采用类似的思路去支持,而通过Reflection去调用方法则不行...博主是通过翻看Lookup的源码发现了使用IMPL_LOOKUP的方式,详情见评论区~ 二、基于栈的字节解释执行引擎 在Java语言中,javac编译器完成了程序代码经过词法分析->语法分析->抽象语法树...->遍历语法树生成线性的字节指令流的过程,而解释器在虚拟机的内部。...因为虚拟机中解析器和即时编译器都会对输入的字节进行优化,比如在HotSpot虚拟机中,有很多以”fast_“开头的非标准字节指令用于合并、替换输入的字节以提升解释执行的性能,而即时编译器的优化手段更加繁多

26620
领券