第五篇 虚拟机字节码执行引擎

概述:

        执行引擎是java虚拟机最核心的组成部分之一,“虚拟机”是一个相对于“物理机”的概念,区别是:物理机的执行引擎是直接建立在处理器、硬件、指令集和操作系统层面的;而虚拟机的执行引擎则是自己实现的,因此可以自行制定指令集与引擎的结构体系,并且能够执行那些不被硬件直接支持的指令集格式。本篇主要从概念的角度来学习虚拟机的方法调用和字节码执行。

第一节:运行时的栈帧结构

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

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

        对于执行引擎来说,活动线程中,只有栈顶的栈帧是有效的,称为当前栈帧,这个栈帧所关联的方法称为当前方法。


        接下来详细学习栈帧中的各个元素:

1、局部变量表

      局部变量表用于存储方法参数和方法内部定义的局部变量。

      局部变量表的容量以变量槽(Slot)为最小单位,虚拟机规范中并没有指明Slot具体是多大,一般来说,每个Slot占用32位长度的内存空间。虚拟机允许Slot的长度随着处理器、操作系统或虚拟机的不同而发生变化。不过无论如何,即使在64位虚拟机中使用了64位长度的内存空间来实现一个Slot,虚拟机仍要使用对齐和补白的手段将Slot在外观上看起来与32位虚拟机中的一致。

        说起数据类型,java中的32位以内的数据类型有:boolean,byte,char,short,int,float,reference和returnAddress八种类型,其中returnAddress类型指的是为字节码指令jsr,jsr_w和ret服务的,它指向了一条字节码指令的地址。64位的只有long和double,对32位的分配一个空间,对64位的分配两个空间。

        关于局部变量表,还有一点需要强调,就是局部变量表不想前面介绍的类变量那样存在“准备阶段”。我们知道,类变量在准备阶段赋予系统初始值;另外一次在初始化阶段,赋予程序定义的初始值。但是局部变量不一样,局部变量没有“准备阶段”,不赋初值的话在编译阶段就会报错。

2、操作数栈

       在一个方法执行的时候,操作数栈是空的,在方法的执行过程中,会有各种字节码指令向操作数栈中写入和提取内容,也就是入栈和出栈操作。

       注意:我们前面说过每个线程都有各自独立的栈帧,他们是互相独立的;但大多虚拟机的实现都会做一些优化处理,让栈帧中的一部分内容实现共享。

一般:操作数栈共享区域和局部变量表共享区域是重叠区域。

3、动态连接

        每个栈帧都包含一个指向运行时常量池中该栈帧所属方法的引用,持有这个引用是为了支持方法调用过程中的动态连接。

4、方法返回地址

         当一个方法执行完后会有两种返回方式:

         (1)正常返回:返回一定数值或是返回空,执行调用该方法的方法;

         (2)异常返回:返回时出现异常,退出时,返回地址要通过异常处理器来确定,栈帧中一般不会保存这部分信息。

第二节:方法调用(解析和分配:查阅资料即可)

         调用阶段: 该阶段唯一确定的就是调用哪一个方法,即确定调用方法的版本。

第三节:基于栈的字节码解释执行引擎

         我们强调过,执行java代码的时候有解释执行和编译执行,这个不强调了,编译课程上老师强调过。

         

我们需要知道的是:javac编译器完成了程序代码经过词法分析、语法分析到抽象语树,在遍历语法树生成线性的字节码指令流的过程。因为这一部分是在虚拟机外进行的,而解释器在虚拟机的内部,所以java程序的编译就是半独立的实现。

基于寄存器或是栈的 解释执行器的原理学习计算机体系结构就可以了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 内容概要 《计算机试卷1》是一份综合性的计算机基础和应用测试卷,涵盖了计算机硬件、软件、操作系统、网络、多媒体技术等多个领域的知识点。试卷包括单选题和操作应用两大类,单选题部分测试学生对计算机基础知识的掌握,操作应用部分则评估学生对计算机应用软件的实际操作能力。 ### 适用人群 本试卷适用于: - 计算机专业或信息技术相关专业的学生,用于课程学习或考试复习。 - 准备计算机等级考试或职业资格认证的人士,作为实战演练材料。 - 对计算机操作有兴趣的自学者,用于提升个人计算机应用技能。 - 计算机基础教育工作者,作为教学资源或出题参考。 ### 使用场景及目标 1. **学习评估**:作为学校或教育机构对学生计算机基础知识和应用技能的评估工具。 2. **自学测试**:供个人自学者检验自己对计算机知识的掌握程度和操作熟练度。 3. **职业发展**:帮助职场人士通过实际操作练习,提升计算机应用能力,增强工作竞争力。 4. **教学资源**:教师可以用于课堂教学,作为教学内容的补充或学生的课后练习。 5. **竞赛准备**:适合准备计算机相关竞赛的学生,作为强化训练和技能检测的材料。 试卷的目标是通过系统性的题目设计,帮助学生全面复习和巩固计算机基础知识,同时通过实际操作题目,提高学生解决实际问题的能力。通过本试卷的学习与练习,学生将能够更加深入地理解计算机的工作原理,掌握常用软件的使用方法,为未来的学术或职业生涯打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值