JVM:执行引擎

执行引擎概述

在这里插入图片描述

在这里插入图片描述

执行引擎的工作过程

  1. 执行引擎在执行的过程中究竟需要执行什么样的字节码指令完全依赖于PC寄存器
  2. 每当执行完一项指令操作后,PC寄存器就会更新下一条需要被执行的指令地址
  3. 方法在执行的过程中,执行引擎有可能会通过存储在局部变量表中的对象引用准确定位到存储在Java堆区中的对象实例信息,以及通过对象头中的元数据指针定位到目标对象的类型信息

在这里插入图片描述

  • 从外观上来看,所有的Java虚拟机的执行引擎输入、输出都是一致的:
    • 输入的是字节码二进制流,处理过程是字节码解析执行的等效过程
    • 输出的是执行结果

Java代码编译和执行过程

大部分的程序代码转换成物理机的目标代码或虚拟机能执行的指令集之前,都需要经过下图的各个步骤

在这里插入图片描述

Java代码编译

Java代码编译是由Java源码编译器来完成的,流程如下所示:

在这里插入图片描述

Java代码执行

Java字节码的执行是由JVM执行引擎来完成的,流程如下所示:

在这里插入图片描述

什么是解释器,什么是JIT编译器?

  • 解释器

    当Java虚拟机启动时会根据预定义的规范堆字节码采用逐行解释的方式执行,将每条字节码文件中的内容“翻译”为对应平台的本地机器指令执行

  • JIT(Just In Time Compiler)编译器

    编译器:就是虚拟机将源代码直接编译成和本地机器平台相关的机器语言

为什么说Java是半编译半解释型语言?

在这里插入图片描述

机器码、指令、汇编语言

机器码

在这里插入图片描述

指令、指令集

在这里插入图片描述

汇编语言

在这里插入图片描述

高级语言

在这里插入图片描述

在这里插入图片描述

C、C++源程序执行过程

编译过程又可以分成两个阶段:编译和汇编

  • 编译过程:是读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码
  • 汇编过程:实际上指把汇编语言代码翻译成目标机器指令的过程

在这里插入图片描述

字节码

在这里插入图片描述

解释器

JVM设计者们的初衷仅仅只是单纯地为了满足Java程序实现跨平台特性,因此避免采用静态编译的方式直接生成本地机器指令,从而诞生了实现解释器在运行时采用逐行解释字节码执行程序的想法

在这里插入图片描述

解释器工作机制(或工作任务)

在这里插入图片描述

解释器分类

在这里插入图片描述

现状

在这里插入图片描述

JIT编译器

Java代码的执行分类

在这里插入图片描述

在这里插入图片描述

解释器与编译器的抉择?

在这里插入图片描述

HotSpot JVM的执行方式

在这里插入图片描述

经典案例

在这里插入图片描述

JIT编译器概念解释

在这里插入图片描述

热点代码及探测方式

在这里插入图片描述

在这里插入图片描述

方法调用计数器

在这里插入图片描述

在这里插入图片描述

热度衰减

在这里插入图片描述

回边计数器

在这里插入图片描述

在这里插入图片描述

HotSpot VM中JIT分类

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

总结

  • 一般来说,JIT编译出来的机器码性能比解释器高
  • C2编译器启动时长比C1编译器慢,系统稳定执行以后,C2编译器执行速度远远快于C1编译器

扩展内容

在这里插入图片描述

关于AOT编译器

在这里插入图片描述
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值