JVM学习笔记(7)-字节码执行引擎
来源:互联网 发布:物流企业利润率的算法 编辑:程序博客网 时间:2024/06/06 03:04
1.运行时栈帧
栈帧是用于支持虚拟机进行方法调用和方法执行的数据结构,是虚拟机运行时数据区中的虚拟机栈的栈元素。
栈帧中存储了方法的局部变量表、操作数栈、动态链接和方法的返回地址等信息。
每一个方法从调用开始到执行完成,都对应一个栈帧在虚拟机里面的入栈和出栈
在编译的时候栈帧需要多大的局部变量表、多深的操作数栈都已经确定了,并写入到方法表的Code属性中。
一个线程中的方法调用链可能很长,有很多方法都处于执行状态。对于执行引擎来说,在活动线程中,只有位于栈顶的栈帧才是有效的,称为当前栈帧,与这个栈帧的相关联的方法叫当前方法,执行引擎运行所有字节码指令都对当前栈帧进行操作。
(1)局部变量表
是一组变量值存储空间,用于存放方法参数和方法内部定义的局部变量。在Java程序编译为class文件时就在方法的Code属性的max_locals数据项中确定了该方法所有分配的局部变量表的最大容量。局部变量表的最小单位为slot,每个slot都能存放一个boolean、byte、char、short、int、float、reference或returnAddress类型的数据
(2)操作数栈
操作数栈是一个后入先出栈,同局部变量表一样,操作数栈的最大深度也在编译的时候写入Code属性的max_stacks数据项中。操作数栈的每一个元素可以是任意的java数据类型,包括long和double。32位数据类型所占的栈容量是1,64位所占栈容量是2.
当一个方法刚刚开始的执行的时候,这个方法的操作数栈是空的,在方法的执行过程中,会有各种字节码指令往操作数栈中写入和提取内容,也即是入栈和出栈操作,
比如在算数运算的时候通过操作数栈来进行,或者在调用其他方法的时候通过操作数栈来进行参数传递
(3)动态链接
每个栈都包含一个指向运行时常量池中该栈帧所属方法的引用,持有这个引用是为了支持方法调用过程中的动态链接
(4)方法返回地址
当一个方法执行完成之后又两种方式可以退出这个方法
【1】正常退出,方法执行完了,执行引擎遇到方法返回的字节码指令,这时候可能会有返回值传递给上层的方法调用者
【2】异常退出,在方法执行过程中遇到了异常,并且这个异常没在方法体中得到处理,这种退出叫异常退出,是不会给上层调用者返回返回任何值的
- JVM学习笔记(7)-字节码执行引擎
- JVM学习笔记六 :虚拟机字节码执行引擎
- JVM学习笔记(四)——字节码执行引擎
- JVM(7)虚拟机字节码执行引擎
- JVM字节码执行引擎
- JVM字节码执行引擎
- 【JVM】字节码执行引擎
- JVM字节码执行引擎
- jvm笔记8--虚拟机字节码执行引擎
- Java虚拟机学习笔记(字节码执行引擎)
- JVM笔记整理(第8章 虚拟机字节码执行引擎)
- JVM读书笔记(五):虚拟机字节码执行引擎
- 深入理解jvm(四):虚拟机字节码执行引擎
- Understanding the JVM(十二)虚拟机字节码执行引擎
- jvm之虚拟机字节码执行引擎(续)
- 简述JVM基础(六):虚拟机字节码执行引擎
- 深入理解JVM-字节码执行引擎
- 深入JVM字节码执行引擎
- 事务管理之JDBC事务
- effective c++:资源管理相关
- GIT——基本配置
- Java 9 揭秘(16. 虚拟机栈遍历)
- 宏函数和函数的区别以及优缺点
- JVM学习笔记(7)-字节码执行引擎
- Windows定时备份数据库
- 众数问题
- eclipse部署时候不拷jar包到web-inf下面的lib目录解决办法
- jdk 源码分析(16)java CyclicBarrier 源码解析
- Git之使用TortoiseGit提交代码
- App中使用高德定位服务,少部分用户会反映定位不了
- 关于烂代码的那些事(上)---程序员的自我修炼手册
- Java注解的简单说明