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

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

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

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

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

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

运行时栈帧结构

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

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

栈帧组成部分

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

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

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

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

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

  • 方法调用与分派

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

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

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

    总结

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

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

    你可能感兴趣的文章
    OA系统多少钱?OA办公系统中的价格选型
    查看>>
    OA系统选型:选择好的工作流引擎
    查看>>
    OA让企业业务流程管理科学有“据”
    查看>>
    OA项目之我的会议(会议排座&送审)
    查看>>
    OA项目之我的会议(查询)
    查看>>
    Object c将一个double值转换为时间格式
    查看>>
    object detection之Win10配置
    查看>>
    object detection训练自己数据
    查看>>
    object detection错误Message type "object_detection.protos.SsdFeatureExtractor" has no field named "bat
    查看>>
    object detection错误之Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
    查看>>
    object detection错误之no module named nets
    查看>>
    Object of type 'ndarray' is not JSON serializable
    查看>>
    Object Oriented Programming in JavaScript
    查看>>
    object references an unsaved transient instance - save the transient instance before flushing
    查看>>
    Object.keys()的详解和用法
    查看>>
    OBJECTIVE C (XCODE) 绘图功能简介(转载)
    查看>>
    Objective-C ---JSON 解析 和 KVC
    查看>>
    Objective-C 编码规范
    查看>>
    Objective-C——判断对象等同性
    查看>>
    Objective-C之成魔之路【7-类、对象和方法】
    查看>>