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

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

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

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

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

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

运行时栈帧结构

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

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

栈帧组成部分

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

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

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

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

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

  • 方法调用与分派

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

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

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

    总结

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

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

    你可能感兴趣的文章
    POJ1218 HDU1337 ZOJ1350 UVALive2557 THE DRUNK JAILER
    查看>>
    poj1222 EXTENDED LIGHTS OUT(gauss)
    查看>>
    POJ1240 m叉树
    查看>>
    Poj1328--Radar Installation(区间选点)
    查看>>
    POJ1384Piggy-Bank(DP)
    查看>>
    POJ1417 True Liars —— 并查集 + DP
    查看>>
    Poj1459 Power Network 预流推进
    查看>>
    POJ1502(MPI Maelstrom)
    查看>>
    poj1568 Find the Winning Move[极大极小搜索+alpha-beta剪枝]
    查看>>
    poj1730 - Perfect Pth Powers(完全平方数)(水题)
    查看>>
    poj1753——Flip Game
    查看>>
    poj1936 假期计划第一水
    查看>>
    poj1958-汉诺四塔问题(三种方法)
    查看>>
    poj1988(并查集)
    查看>>
    POJ2007+几何+极角排序
    查看>>
    poj2039
    查看>>
    poj2135(简单的最小费用流问题)
    查看>>
    POJ2251
    查看>>
    POJ2253-Frogger
    查看>>
    POJ2728 Desert King
    查看>>