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. 3DMAX安装失败怎样卸载重新安装3DMAX,解决3DMAX安装失败的方法总结

    技术帖:3DMAX没有按照正确方式卸载,导致3DMAX安装失败.楼主也查过网上关于如何解决3DMAX安装失败的一些文章,是说删除几个3DMAX文件和3DMAX软件注册表就可以解决3DMAX安装失败的问 ...

  2. 2017 ACM/ICPC Asia Regional Shenyang Online:number number number hdu 6198【矩阵快速幂】

    Problem Description We define a sequence F: ⋅ F0=0,F1=1;⋅ Fn=Fn−1+Fn−2 (n≥2). Give you an integer k, ...

  3. form表单提交,后台怎么获取select的值?后台直接获取即可,和input方式一样。

    form表单提交,后台怎么获取select的值? 后台直接获取即可,和后台获取input的值方式一样. form提交后,后台直接根据select的name获取即可,即getPara("XXX ...

  4. SharpDX初学者教程第4部分:绘制三角形

    原文 http://www.johanfalk.eu/blog/sharpdx-beginners-tutorial-part-4-drawing-a-triangle 现在我们有了一个Direct3 ...

  5. 1 项目里面如何打印log日志

    1  首先写一个logging.py文件 import logging from conf import setting #配置文件,里面有日志存放路径 def mylog(): logger = l ...

  6. EF的多线程与分库架构设计实现(2)

    距离上次讲解EF6分库架构(https://www.cnblogs.com/gbat/p/6374607.html)实现已经过去2年了..上次发出来后,一直到现在依然有很多人陆陆续续的加我好友,问我要 ...

  7. AFNetworkingErrorDomain 错误

    AFNetworking and POST Request I'm getting this response in error.userInfo while making a POST reques ...

  8. LightOJ 1269 Consecutive Sum (Trie树)

    Jan's LightOJ :: Problem 1269 - Consecutive Sum 题意是,求给定序列的中,子序列最大最小的抑或和. 做法就是用一棵Trie树,记录数的每一位是0还是1.查 ...

  9. win10访问Microsoft数据库问题总结

    今天突然接到任务 把15年的一个wpf项目倒腾出来,根据客户要求微调界面效果 翻扯项目历史记录,找到最后一版的项目,不过历经三载,开发时的环境和现在的环境略有差距 原来:win7 64位   vs20 ...

  10. SSM整合 上传下载之添加商品

    上传下载细节: 导入xml配置文件!! Controller中要配置存储路径,调用transferto上传文件 上传图片 要将图片的类设置为 MultipartFile 图片下载: 源码: 页面展示: ...