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

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

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

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

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

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

运行时栈帧结构

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

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

栈帧组成部分

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

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

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

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

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

  • 方法调用与分派

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

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

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

    总结

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

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

    你可能感兴趣的文章
    Python+Selenium自动化测试项目实战
    查看>>
    Python+Selenium自动化测试项目实战【建议收藏】
    查看>>
    Python+Selenium自动化测试:Page Object模式
    查看>>
    python+selenium进行cnblog的自动化登录测试
    查看>>
    Python函数只返回第一个值而不是数据框
    查看>>
    Python+SQL实战:京东用户行为数据分析案例解析(上)
    查看>>
    Python+SQL实战:京东用户行为数据分析案例解析(下)
    查看>>
    PYTHON+Twisted+sqlanydb=ABORT()
    查看>>
    Python函数之返回值、作用域和局部变量
    查看>>
    Python+统计学 | 探索常用的数据分析统计分布
    查看>>
    python, selenium中用于切换帧的函数
    查看>>
    python函数
    查看>>
    python----线程、进程、协程的区别及多线程详解
    查看>>
    python---5
    查看>>
    python---使用celery分布式系统异步发送短信(云通讯)来验证登录
    查看>>
    python--003--百分号字符串拼接、format
    查看>>
    Python--10、线程
    查看>>
    Python--Redis实战:第四章:数据安全与性能保障:第4节:复制
    查看>>
    python--基本代码规范
    查看>>
    Python--抽象类接口类
    查看>>