zoukankan      html  css  js  c++  java
  • 图解JVM字节码执行引擎之栈帧结构

    一、执行引擎

         “虚拟机”的概念是相对于“物理机”而言的,这两种“机器”都有执行代码的能力。物理机的执行引擎是直接建立在硬件处理器、物理寄存器、指令集和操作系统层面的;而“虚拟机”的执行引擎是自己实现的,因此可以自定义指令集和执行引擎的结构体系,而且可以执行那些不能被硬件直接支持的指令。

         在不同的“虚拟机”实现里面,执行引擎在执行JAVA代码的时候有两种方式:解析实行(通过解释器执行)和编译执行(通过即时编译器编译成本地代码执行)。

    二、运行时数据结构

    栈帧

          栈帧是用于支持虚拟机进行方法调用和方法执行的数据结构,他是虚拟机运行时数据区的虚拟机栈的栈元素。栈帧存储了方法的局部变量表、操作数栈、动态链接和方法的返回地址等信息。每一个方法从调用开始直至执行完成的过程,都对应的一个栈帧在虚拟机栈里入栈和出栈的过程。

          在编译程序代码的时候,栈帧中需要多大的局部变量表,多深的操作数栈都已经完全确定了,并且写入到方法表的Code属性中,因此一个栈帧需要多大的内存,不会受到程序运行期变量数据的影响。

         一个线程的方法调用链可能会很长,很多方法会同时处于执行状态。对于执行引擎来说,在当前活动的线程中,只有位于栈顶的栈帧才是有效的,成为当前栈帧,与这个栈帧相关联的方法成为当前方法。

         典型的栈帧概念模型如下图所示:

         

  • 相关阅读:
    二分查找(Binary Search)的几种变种形式
    深入理解jvm虚拟机读书笔记-垃圾收集器与内存分配策略(二)
    深入理解jvm虚拟机读书笔记-垃圾收集器与内存分配策略(一)
    Java8函数式编程
    Spring DBUnit 插入数据的时候如何处理自增ID
    IDEA Debug 技巧总结
    声明
    Mybatis最详细笔记
    关于jdbc概述
    SpringAOP(动态代理)
  • 原文地址:https://www.cnblogs.com/chenyangyao/p/5303462.html
Copyright © 2011-2022 走看看