第八章 虚拟机字节码执行引擎
来源:互联网 发布:Java swing黑色主题 编辑:程序博客网 时间:2024/05/06 21:54
执行引擎是Java虚拟机最核心的组成部分之一。执行引擎在执行Java代码的时候可能有解释执行(通过解释器执行)和编译执行(通过即时编译器产生的本地代码执行)两种选择,也可能两者兼备,甚至还可能包含几个不同级别的编译器执行引擎。但从Java虚拟机规范中描述的执行引擎概念模型来说,所有的Java虚拟机的执行引擎都是一样的:它的输入是字节码文件,处理过程是字节码解析的等效过程,输出的是执行结果。
1.运行时栈帧结构
首先,栈帧是用于支持虚拟机进行方法调用和方法执行的数据结构,用于存放一些诸如:
局部变量表
操作数栈
动态连接
方法返回地址
每个方法从调用开始到执行完毕,就对应着一个栈帧在虚拟机栈里面从入栈到出栈的过程。
1.局部变量表
局部变量表当然存储的是方法参数+方法内的变量。而这些数据被存在变量槽(Variable Slot,下称slot)的最小单位中,slot中能存放的类型为:
8种基类类型(bool/byte/char/short/int/long/float/double)
reference
return Address:指向字节码指令的地址
Java虚拟机规范并没有规定每个slot的大小。所以不同的虚拟机或者操作系统可以有各自的实现。当然,一个slot可以存放一个32位以内的数据类型,包含了上面3类中除long和double的其他类型(64的long和double则分配两个连续slot)
Java虚拟机栈是线程私有的,对线程来说是原子性的
那么JVM如何使用局部变量表的东西呢?答案是索引定位
如果是非static方法,局部变量表的第0号索引的slot默认是当前对象实例的引用对象实例的引用,也就是this指向的对象。
slot可以复用,比如函数内变量作用域只在一个循环内,那么后面的变量可以占用这个slot
类变量(非实例变量)的赋值过程:
1.准备阶段,赋予系统初始值(有final的话,在编译时会加上ConstantValue)属性
初始化阶段:是程序员指定的值。实例变量是在使用 new 关键字后,在堆上先进行分配内存的时候获取一次数据类型的零值,然后再执行实例变量定义处的初始化(C++不允许),最后执行的是构造函数的初始化。
- 第八章 虚拟机字节码执行引擎
- 第八章 虚拟机字节码执行引擎
- 第八章 虚拟机字节码执行引擎
- [深入理解Java虚拟机]第八章 字节码执行引擎-基于栈的字节码解释执行引擎
- 《深入理解java虚拟机》读书笔记-第八章虚拟机字节码执行引擎
- 《深入理解java虚拟机》学习-第八章-虚拟机字节码执行引擎-运行时栈帧结构
- 《深入理解java虚拟机》学习-第八章-虚拟机字节码执行引擎-方法调用
- [深入理解Java虚拟机]第八章 字节码执行引擎-运行时栈帧结构
- [深入理解Java虚拟机]第八章 字节码执行引擎-方法调用
- 虚拟机字节码执行引擎
- 虚拟机字节码执行引擎
- 虚拟机字节码执行引擎
- 虚拟机字节码执行引擎
- 虚拟机字节码执行引擎
- 虚拟机字节码执行引擎
- 虚拟机字节码执行引擎
- 虚拟机字节码执行引擎
- 虚拟机字节码执行引擎
- 第七章 虚拟机类加载机制
- MySql分页查询优化思路
- 重装 Macos sierra系统 U盘
- Html/CSS margin的百分比 -》深入探讨
- java动态加载指定的类或者jar包反射调用其方法-涉及其他jar中的类就报ClassNotFound问题分析及解决思路
- 第八章 虚拟机字节码执行引擎
- pthon数据挖掘与分析实战【笔记】-第四章 数据预处理4.1数据清洗
- 让事情完成,拖延或不拖延
- javaPO,VO,BO等简称的意思
- MySQL性能优化
- iOS学习之第二个View使用UITabBarViewController
- Unity UGUI Button 按下,抬起,连续按下,鼠标退出事件响应函数
- JQueryEasyUI 组件的事件和方法
- [Python模块学习]使用pprint模块格式化打印