JVM执行引擎
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执行引擎的更多相关文章
- 第 12 章 JVM执行引擎
目录 第 12 章 执行引擎 1.执行引擎概述 1.1.执行引擎概述 1.2.执行引擎工作过程 2.Java 代码编译和执行过程 2.1.解释执行和即时编译 2.2.解释器和编译器 3.机器码 指令 ...
- 深入分析JVM执行引擎
程序和机器沟通的桥梁 一.闲聊 相信很多朋友在出国旅游,或者与外国友人沟通的过程中,都会遇到语言不通的烦恼.这时候我们就需要掌握对应的外语或者拥有一部翻译机.而笔者只会中文,所以需要借助一部翻译器才能 ...
- 图解JVM执行引擎之方法调用
一.方法调用 方法调用不同于方法执行,方法调用阶段的唯一任务就是确定被调用方法的版本(即调用哪一个方法),暂时还不涉及方法内部的具体运行过程.Class文件的编译过程中不包括传统编译器中的连接步骤,一 ...
- JVM执行引擎总结(读《深入理解JVM》) 早期编译优化 DCE for java
execution engine: 运行时栈current stack frame主要保存了 local variable table, operand stack, dynamic linking, ...
- JVM执行引擎的执行过程
摘自深入分析java web技术内幕
- JVM 专题十五:执行引擎
1. 执行引擎概述 1.1 执行引擎 1.2 概述 执行引擎是Java虚拟机的核心组成部分之一. 虚拟机是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处 ...
- 【JVM之内存与垃圾回收篇】执行引擎
执行引擎 执行引擎概述 执行引擎属于 JVM 的下层,里面包括 解释器.及时编译器.垃圾回收器 执行引擎是 Java 虚拟机核心的组成部分之一. "虚拟机"是一个相对于" ...
- Java虚拟机执行引擎
执行引擎 关于执行引擎相关的部分, 在之前的博文里 Java内存区域中已经有所提及. 回顾一下: 也只有几个概念, JVM方法调用和执行的基础数据结构是 栈帧, 是内存区域中 虚拟机栈中的栈元素, 每 ...
- JVM执行原理
,Java是一种技术,它由四方面组成:Java编程语言.Java类文件格式.Java虚拟机和Java应用程序接口(Java API).它们的关系如下图所示: 运行期环境代表着Java平台,开发人员编写 ...
随机推荐
- Mysql Command
数据库备份: mysqldump -uroot -p -h 192.168.1.190 --default-character-set=utf8 $dbname > backup_db.sql ...
- python-selenium自动化测试(火狐、谷歌、360浏览器启动)
一.打开谷歌浏览器 import selenium from selenium import webdriver browser = webdriver.Chrome(executable_path ...
- [牛腩]如何关闭.net framework4.0的请求验证 标签: 发布 2015-07-31 09:27 887人阅读 评论(38)
敲牛腩的时候,点击运行提示:从客户端中检测到有潜在危险的 Request.Form 值,感觉自己代码敲的并没有问题,于是开始各种查,下面分享一下我对此进行的研究. 为什么会报这个错误? 在 Web 应 ...
- VMware station 安装报错 failed to install the hcmon driver
VMware station 安装报错 failed to install the hcmon driver 1.将 C:\Windows\System32\drivers 下的hcmon.sys改名 ...
- Jquery FormData文件异步上传 快速指南
网站中文件的异步上传是个比较麻烦的问题,不过现在通过jquery 可以很容易的解决这个问题: 使用jquery2.1版本,较老版本不支持异步文件上传功能: 表单代码: <form id=&quo ...
- 2012-4-2 通过MdiParent设置窗体最前
SentenceForm form = new SentenceForm(); form.MdiParent = this; form.Show(); //form.MdiParent = this; ...
- Codeforces Round #168 (Div. 1 + Div. 2)
A. Lights Out 模拟. B. Convex Shape 考虑每个黑色格子作为起点,拐弯次数为0的格子构成十字形,拐弯1次的则是从这些格子出发直走达到的点,显然需要遍历到所有黑色黑色格子. ...
- Wunder Fund Round 2016 (Div. 1 + Div. 2 combined)
现在水平真的不够.只能够做做水题 A. Slime Combining 题意:就是给n个1给你.两个相同的数可以合并成一个数,比如说有两个相同的v,合并后的值就是v+1 思路:直接模拟栈 #inclu ...
- Javassist指引(二)--ClassPool
原文链接 上一章: Javassist指引(一) 2.ClassPool ClassPool是一个CtClass的容器.因为编译器随时可能访问一个CtClass类,所以一旦一个CtClass创建,它将 ...
- 4-3 xpath的用法