《剑指JVM》——第11章——执行引擎的工作原理——执行引擎1

🌈hello,你好鸭,我是Ethan,西安电子科技大学大三在读,很高兴你能来阅读。

✔️目前博客主要更新Java系列、项目案例、计算机必学四件套等。
🏃人生之义,在于追求,不在成败,勤通大道。加油呀!

🔥个人主页:Ethan Yankang
🔥推荐:史上最强八股文||一分钟看完我的几百篇博客

🔥温馨提示:划到文末发现专栏彩蛋   点击这里直接传送

🔥本篇概览:详细讲解了🌈⭕🔥


【计算机领域一切迷惑的源头都是基本概念的模糊,算法除外】


🔥 《剑指JVM》序言-CSDN博客

🔥 《剑指JVM》全书-CSDN博客


🌈章节引出

前一篇章:

到目前为止,我们已经讲完了JVM的运行时数据区,我们知道Java源文件经过编译之后生成class文件,class文件加载到内存中,此时物理机器并不能直接执行代码,因为它没办法识别 class 文件中的内容,此时就需要执行引擎(Execution Engine)来做相应的处理。本章将主要讲解执行引擎在JVM中的作用。

执行引擎对字节码的处理分为两种——解释执行、编译执行

🌈章节速览


11.1执行引擎概述

如果想要让一个Java 程序运行起来,执行引擎的任务就是将字节码指令解释/编译为对应平台上的机器码才可以


执行引擎是JVM核心的组成部分之一。可以把JVM架构分成三部分,如图11-1所示执行引擎位于JVM的最下层(图中虚线框部分),可以粗略地看到执行引擎负责和运行时数据区交互


11.2Java 代码编译和执行过程


我们知道虚拟机并不是真实存在的,是由软件编写而成的,它是相对于物理机的概念。但是虚拟机和物理机一样都可以执行一系列的计算机指令,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,执行那些不被硬件直接支持的指令集格式

JVM 装载字节码到内存中,但字节码仅仅只是一个实现跨平台的通用契约而已,它并不能够直接运行在操作系统之上,因为字节码指令并不等价于机器码,它内部包含的仅仅只是一些能够被 JVM所识别的字节码指令、符号表,以及其他辅助信息。
如果想要让一个Java 程序运行起来,执行引擎的任务就是将字节码指令解释/编译为对应平台上的机器码才可以



在 Java 虚拟机规范中制定了JVM 执行引擎的概念模型,这个概念模型成为各大发行商的JVM 执行引擎的统一规范。执行引擎的工作流程如图11-4所示。

(1)执行引擎在执行的过程中需要执行什么样的字节码指令完全依赖 PC 寄存器

(2)每当执行完一项指令操作后,PC寄存器就会更新下一条需要被执行的指令地址。

(3)方法在执行的过程中,执行引擎有可能会通过存储在局部变量表中的对象引用准确定位到存储在 Java堆区中的对象实例信息,以及通过对象头中的元数据指针定位到目标对象的类型信息。

        所有的 JVM 的执行引擎输入、输出都是一致的,输入的是字节码二进制流,处理过程是
字节码解析执行的过程,输出的是执行结果。

大部分的程序代码转换成物理机的目标代码或虚拟机能执行的指令集之前,都需要经过图11-5中的各个步骤,程序源码到抽象语法树的过程属于代码编译的过程,和虚拟机无关,如图5-1中矩形实线框所示;指令流到解释执行的过程属于生成虚拟机指令集的过程,如图5-1中矩形虚线框所示;优化器到目标代码的过程属于生成物理机目标代码的过程,如图5-1中最下层云状图形所示。


Java代码编译:

具体来说,Java 代码编译是由Java源码编译器(javac.exe)来完成,流程图如图11-6所示。在Java中javac编译器主要负责词法分析、语法分析和语义分析,最终生成二进制字节码,此过程发生在虚拟机外部

字节码解释执行:

Java源代码经过javac编译器编译之后生成字节码,Java 字节码的执行是由JVM 执行引擎来完成,流程图如图11-7所示。可以看到图中有JIT编译器和字节码解释器两种路径执行字节码,也就是说可以解释执行,也可以编译执行。这也就是为什么现在 Java 语言被称为半编译半解释型语言的原因:



💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖

热门专栏推荐

🌈🌈计算机科学入门系列                     关注走一波💕💕

🌈🌈CSAPP深入理解计算机原理        关注走一波💕💕

🌈🌈微服务项目之黑马头条                 关注走一波💕💕

🌈🌈redis深度项目之黑马点评            关注走一波💕💕

🌈🌈JAVA面试八股文系列专栏           关注走一波💕💕

🌈🌈JAVA基础试题集精讲                  关注走一波💕💕   

🌈🌈代码随想录精讲200题                  关注走一波💕💕


总栏

🌈🌈JAVA基础要夯牢                         关注走一波💕💕  

🌈🌈​​​​​​JAVA后端技术栈                          关注走一波💕💕  

🌈🌈JAVA面试八股文​​​​​​                          关注走一波💕💕  

🌈🌈JAVA项目(含源码深度剖析)    关注走一波💕💕  

🌈🌈计算机四件套                               关注走一波💕💕  

🌈🌈数据结构与算法                           ​关注走一波💕💕  

🌈🌈必知必会工具集                           关注走一波💕💕

🌈🌈书籍网课笔记汇总                       关注走一波💕💕         



📣非常感谢你阅读到这里,如果这篇文章对你有帮助,希望能留下你的点赞👍 关注❤收藏✅ 评论💬,大佬三连必回哦!thanks!!!
📚愿大家都能学有所得,功不唐捐!

  • 23
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值