博客
关于我
《深入理解 Java 虚拟机》读书笔记:虚拟机字节码执行引擎
阅读量:364 次
发布时间:2019-03-04

本文共 970 字,大约阅读时间需要 3 分钟。

Java虚拟机执行引擎与运行时栈帧结构

Java虚拟机(JVM)的核心组成部分之一是执行引擎,它在不同的实现中可能会采用解释执行或即时编译两种方式。无论是哪种方式,JVM的外观都是统一的:输入的是字节码文件,处理过程是对字节码的解析,输出的是执行结果。

物理机与虚拟机执行引擎的区别

物理机的执行引擎直接建立在处理器、硬件、指令集和操作系统层面上,而虚拟机的执行引擎则由虚拟机自己实现,可以自行定义指令集和体系结构,从而支持那些硬件不直接支持的指令集。

运行时栈帧结构

栈帧(Stack Frame)是JVM运行时数据区中的栈元素,用于支持方法调用和执行。每个栈帧包含局部变量表、操作数栈、动态连接、方法返回地址和附加信息。栈帧的生命周期从入栈到出栈,期间执行方法的各个阶段。

栈帧的操作数栈是后入先出的栈,用于存储方法执行过程中的数据。虚拟机栈由多个栈帧组成,每个栈帧独立运行,但实际实现中通常会优化部分数据共享以提高性能。

栈帧组成部分

  • 局部变量表:存储方法参数和局部变量,通过索引定位,索引从0开始,Slot是最小存储单位,支持重用以节省空间。

  • 操作数栈:存储方法执行过程中的数据,支持入栈和出栈操作。栈帧间可能存在部分数据共享,提升性能。

  • 动态连接:栈帧指向运行时常量池中的方法引用,支持动态链接。动态链接分为静态解析和动态连接,前者在类加载或第一次使用时完成,后者在每次运行时执行。

  • 方法返回地址:管理方法退出时的返回信息,包括正常退出和异常退出两种方式。正常退出保存返回地址,异常退出则由异常处理器表确定。

  • 附加信息:虚拟机规范允许扩展栈帧存储调试相关信息。

  • 方法调用与分派

    方法调用分为解析与分派两阶段。解析阶段将符号引用转化为直接引用,适用于非虚方法。动态分派根据实际类型选择方法,常见于虚方法。单分派基于一个宗量选择目标方法,而多分派则基于多个宗量。

    基于栈的字节码解释执行引擴

    Java采用解释执行模型,Class文件中的指令流是基于栈架构。解释执行引擴在虚拟机内部完成,最终目标是高效运行。与基于寄存器的指令集相比,栈架构更具移植性,但执行速度较慢。

    总结

    Java虚拟机的执行引擎和栈帧结构是其运行机制的核心,理解这些概念对于掌握Java运行时环境至关重要。从方法调用到栈帧管理,每个细节都影响着应用的性能和稳定性。

    转载地址:http://rrer.baihongyu.com/

    你可能感兴趣的文章
    PHP删除指定目录下的所有文件和文件夹 | 删除指定文件
    查看>>
    php删除文件夹下面所有文件包括(删除文件夹)不删除文件夹
    查看>>
    React Collapse Pane 项目教程
    查看>>
    php判断ip黑名单程序代码
    查看>>
    php判断复选框是否被选中的方法
    查看>>
    PHP判断指定目录下是否存在文件
    查看>>
    php判断数组是否为空
    查看>>
    PHP判断数组是否有重复值、获取重复值
    查看>>
    springboot基于Web的社区留守儿童管理系统源码毕设+论文
    查看>>
    Springboot基于Redisson实现Redis分布式可重入锁【案例到源码分析】
    查看>>
    PHP利用正则表达式实现手机号码中间4位用星号(*)替换显示
    查看>>
    PHP加密与安全的最佳实践
    查看>>
    PHP加速器eaccelerator导致php-fpm进程卡死原因分析
    查看>>
    PHP区分 企业微信浏览器 | 普通微信浏览器 | 其他浏览器
    查看>>
    php原生代码怎么连表查询,PHP tp5中使用原生sql查询代码实例
    查看>>
    PHP去掉转义符
    查看>>
    php去除字符串开头或末尾的字符(例如逗号)
    查看>>
    php反射api
    查看>>
    PHP反射ReflectionClass、ReflectionMethod 入门教程
    查看>>
    PHP反射机制
    查看>>