1.概述

  执行引擎是jvm核心组成部分之一,建立在物理器,硬件和操作系统层面之上,引擎在执行代码时会有解释执行和编译执行两种选择,输入字节码文件,字节码解析输出结果.

2.栈帧

  栈帧是用于支持虚拟机进行方法调用和执行方法的结构,是虚拟机运行时数据区中的虚拟机栈的栈元素,存储方法的局部局部变量,操作数栈,动态链接和方法返回地址等信息,对应着入栈和出栈的过程.

上面是栈帧的基本结构,在线程中的方法调用链中同时执行很多方法,但只有栈顶的栈帧才是有效的,称为当前栈帧,与这个帧关联的叫当前方法,而栈帧的结构中主要分为局部变量表,操作栈,动态链接和方法返回地址

3.局部变量表

  Local Variable Table是一组变量存储空间,用于存放方法参数和方法内部定义的局部变量,当java去编译class文件时,方法的code属性中的max_locals数据项用于确定和分配局部变量表的大小容量,在局部变量表中容量以slot为最小单位,在32位中可以存放基本数据类型,但是reference中的引用通过直接或间接的查找java堆中的起始地址索引,或者直接找到对象所属数据类型在方法区中的存储信息。而在64位中,虚拟机会以高位对齐的方式分配两个连续的slot空间,而只有long和double处于64位空间中,所以java规定将读写分为2个32位的读写做法.由于局部变量是线程私有的数据,当在读写两个连续的slot空间中也不会造成数据安全问题,

  虚拟机通过索引定位的方式使用局部变量表,范围是从0到局部变量表中slot的最大范围,在方法执行时,使用局部变量表完成参数值到参数变量传递过程中,如果执行的是实例方法,局部变量表中第0位索引中的solt将默认用于传递方法所属对象的引用,而通过"this"进行访问参数时,参数则按照表参数表排序排列,而局部变量表中的slot可以重用.

  在参数赋值时,为对象手动赋NULL或者0可以保证字节码校验的准确性保证了类加载的有效性,但在JIT编译优化后会被清除,所以局部变量和类变量在默认值上存在着区别。

 

4.操作数栈

  Operand Stack也被称为操作栈,是一个后入先出的表,最大深度也是Code属性中的mac_stacks中,数栈中每一个元素可以是任意的数据类型,32位的容量为1,64为2,当一个方法执行时,方法的数栈为空,在执行的过程中,作为出栈/入栈操作,而在两个栈帧作为虚拟机栈的元素是完全独立的.

5.动态连接

  每一个栈帧包含着一个指向RCP中该栈帧所属方法的引用,为了支持调用过程中的方法调用,而将符号参数引用在类加载阶段在每一次运行期间直接引用则为动态连接,而在方法中在Class文件里面都是一个符号引用,在类加载解析阶段,会将一部分符号直接转换为直接引用,而解析在方法的调用中实现编译器的执行.

  在java复合,编译器可知,运行期不可变的方法中,主要包含私有方法和静态方法.静态方法与类型直接关联,而私有不可访问,而jvm提供了5条方法调用字节码命令,

  •   invokestatic :调用静态方法
  • invokespecial:调用实例构造器<init>方法
  • invokevirtual: 调用所有虚方法
  • invokeinterface: 调用接口方法
  • invokedynamic:  动态解析限定符所引用方法

  

JVM执行引擎的更多相关文章

  1. 第 12 章 JVM执行引擎

    目录 第 12 章 执行引擎 1.执行引擎概述 1.1.执行引擎概述 1.2.执行引擎工作过程 2.Java 代码编译和执行过程 2.1.解释执行和即时编译 2.2.解释器和编译器 3.机器码 指令 ...

  2. 深入分析JVM执行引擎

    程序和机器沟通的桥梁 一.闲聊 相信很多朋友在出国旅游,或者与外国友人沟通的过程中,都会遇到语言不通的烦恼.这时候我们就需要掌握对应的外语或者拥有一部翻译机.而笔者只会中文,所以需要借助一部翻译器才能 ...

  3. 图解JVM执行引擎之方法调用

    一.方法调用 方法调用不同于方法执行,方法调用阶段的唯一任务就是确定被调用方法的版本(即调用哪一个方法),暂时还不涉及方法内部的具体运行过程.Class文件的编译过程中不包括传统编译器中的连接步骤,一 ...

  4. JVM执行引擎总结(读《深入理解JVM》) 早期编译优化 DCE for java

    execution engine: 运行时栈current stack frame主要保存了 local variable table, operand stack, dynamic linking, ...

  5. JVM执行引擎的执行过程

    摘自深入分析java web技术内幕

  6. JVM 专题十五:执行引擎

    1. 执行引擎概述 1.1 执行引擎 1.2 概述 执行引擎是Java虚拟机的核心组成部分之一. 虚拟机是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处 ...

  7. 【JVM之内存与垃圾回收篇】执行引擎

    执行引擎 执行引擎概述 执行引擎属于 JVM 的下层,里面包括 解释器.及时编译器.垃圾回收器 执行引擎是 Java 虚拟机核心的组成部分之一. "虚拟机"是一个相对于" ...

  8. Java虚拟机执行引擎

    执行引擎 关于执行引擎相关的部分, 在之前的博文里 Java内存区域中已经有所提及. 回顾一下: 也只有几个概念, JVM方法调用和执行的基础数据结构是 栈帧, 是内存区域中 虚拟机栈中的栈元素, 每 ...

  9. JVM执行原理

    ,Java是一种技术,它由四方面组成:Java编程语言.Java类文件格式.Java虚拟机和Java应用程序接口(Java API).它们的关系如下图所示: 运行期环境代表着Java平台,开发人员编写 ...

随机推荐

  1. 复杂SQL示例 (排行榜需求)

    公司项目要求做出排行榜,根据六组数据依次排行,关联多表,SQL记录下来方便日后查看 " ?><!DOCTYPE mapper PUBLIC "-//mybatis.or ...

  2. oracle函数 MIN([distinct|all]x)

    [功能]统计数据表选中行x列的最大值. [参数]all表示对所有的值求最大值,distinct只对不同的值求最大值,默认为all 如果有参数distinct或all,需有空格与x(列)隔开. [参数] ...

  3. Python基础:18类和实例之二

    1:绑定和非绑定 当存在一个实例时,方法才被认为是绑定到那个实例了.没有实例时方法就是未绑定的.在很多情况下,调用的都是一个绑定的方法. 调用非绑定方法并不经常用到,其中一个主要的场景是:派生一个子类 ...

  4. JVM问题诊断

    https://gitbook.cn/books/5d2d822f175a450263e945f9/index.html

  5. Hive高阶聚合函数 GROUPING SETS、Cube、Rollup

    -- GROUPING SETS作为GROUP BY的子句,允许开发人员在GROUP BY语句后面指定多个统计选项,可以简单理解为多条group by语句通过union all把查询结果聚合起来结合起 ...

  6. SuperSocket 中内置的 Flash/Silverlight 策略服务器

    关键字: 策略服务器, Flash策略服务器, Silverlight策略服务器, Policy Server, Flash Policy Server, Silverlight Policy Ser ...

  7. [转][ASP.NET Core 3框架揭秘] 跨平台开发体验: Windows [下篇]

    由于ASP.NET Core框架在本质上就是由服务器和中间件构建的消息处理管道,所以在它上面构建的应用开发框架都是建立在某种类型的中间件上,整个ASP.NET Core MVC开发框架就是建立在用来实 ...

  8. 【原生JS】图片预加载之有序预加载

    <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8& ...

  9. Python--day68--Django ORM常用字段、不常用的字段、自定义字段

    ORM和数据库的对应关系: Django ORM 常用字段和参数 常用字段 AutoField int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建 ...

  10. java 创建线程方式

    1.继承Thread类 子类覆写父类中的run方法,将线程运行的代码存放在run中. 建立子类对象的同时线程也被创建. 通过调用start方法开启线程. 2.实现Runnable接口 子类覆盖接口中的 ...