编程语言
首页 > 编程语言> > Java虚拟机(十一)——执行引擎

Java虚拟机(十一)——执行引擎

作者:互联网

文章目录

执行引擎

执行引擎概述

作用

工作过程

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

JIT(Just In Time Complier)编译器:虚拟机将源代码直接编译成本地机器平台相关的机器语言

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

JDK1.0时代将Java定位为“解释执行”还是比较准确的,后来Java也发展出可以直接生成本地代码的编译器。

现在JVM在执行Java代码的时候,通常都会将解释器执行与编译执行二者结合起来进行。

机器码、指令、汇编语言

机器码

指令

指令集

汇编语言

高级语言

解释器

字节码

解释器

初衷是为了满足Java程序实现跨平台特性,从而使用字节码作为执行程序

分类

Java的历史中,有两套解释器,即最初的字节码解释器,和普遍使用的模板解释

现状

JIT (Just In Time)编译器

概念解释

Hotspot采用解释器与JIT编译器并存的架构,解释器和JIT可以互补,提高效率。

前端编译器:Sun的javac、Eclipse JDT中的增量式编译器(ECJ)

JIT编译器:Hotspot中的C1 、C2编译器

AOT编译器:GNU Complier for the Java(GCJ)、Excelsior JET

热点代码和探测方式

方法调用计数器

统计方法被调用的次数,默认阈值在Client模式下是1500次,Server模式下是10000次。超过这个阈值会触发JIT编译

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RhOVo9O5-1636511719717)(F:\博客笔记\Java 笔记.000 JVM笔记\img\方法调用计数器.png)]

热度衰减

回边计数器

作用是统计一个方法中循环体代码执行的次数,在字节码中遇到控制流想后跳转的指令称为回边(Back Edge)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T749KBrW-1636511719720)(F:\博客笔记\Java 笔记.000 JVM笔记\img\回边计数器.png)]

Hotspot设置程序执行方式

缺省情况下,Hotspot是采用解释器和即时编译器并存的架构,当然可以通过命令显示指定完全采用解释器执行还是完全采用即时编译器执行

JIT分类

C1和C2不同的优化策略:
分层编译策略(Tiered Compilation)

程序解释执行(不开启性能监控)可以触发C1编译,将字节码编译成机器码,可以进行简单优化,也可以加上性能监控,C2编译会根据性能监控信息进行激进优化。

JDK7之后,一旦开发人员显示指定命令-server,就会默认开启分层编译策略,由C1编译器和C2编译器相互协作共同执行编译任务

Graal编译器

JDK10以后,引入了全新的JIT编译器:Graal编译器

AOT编译器

JDK9引入了AOT编译器(静态提前编译器,Ahead Of Time Compiler,AOT)

机器码、指令、汇编语言

机器码

指令

指令集

汇编语言

高级语言

解释器

字节码

解释器

初衷是为了满足Java程序实现跨平台特性,从而使用字节码作为执行程序

分类

Java的历史中,有两套解释器,即最初的字节码解释器,和普遍使用的模板解释

现状

JIT (Just In Time)编译器

概念解释

Hotspot采用解释器与JIT编译器并存的架构,解释器和JIT可以互补,提高效率。

前端编译器:Sun的javac、Eclipse JDT中的增量式编译器(ECJ)

JIT编译器:Hotspot中的C1 、C2编译器

AOT编译器:GNU Complier for the Java(GCJ)、Excelsior JET

热点代码和探测方式

方法调用计数器

统计方法被调用的次数,默认阈值在Client模式下是1500次,Server模式下是10000次。超过这个阈值会触发JIT编译

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TE4242Af-1636511777466)(F:\博客笔记\Java 笔记.000 JVM笔记\img\方法调用计数器.png)]

热度衰减

回边计数器

作用是统计一个方法中循环体代码执行的次数,在字节码中遇到控制流想后跳转的指令称为回边(Back Edge)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hwn9MeBa-1636511777470)(F:\博客笔记\Java 笔记.000 JVM笔记\img\回边计数器.png)]

Hotspot设置程序执行方式

缺省情况下,Hotspot是采用解释器和即时编译器并存的架构,当然可以通过命令显示指定完全采用解释器执行还是完全采用即时编译器执行

JIT分类

C1和C2不同的优化策略:
分层编译策略(Tiered Compilation)

程序解释执行(不开启性能监控)可以触发C1编译,将字节码编译成机器码,可以进行简单优化,也可以加上性能监控,C2编译会根据性能监控信息进行激进优化。

JDK7之后,一旦开发人员显示指定命令-server,就会默认开启分层编译策略,由C1编译器和C2编译器相互协作共同执行编译任务

Graal编译器

JDK10以后,引入了全新的JIT编译器:Graal编译器

AOT编译器

JDK9引入了AOT编译器(静态提前编译器,Ahead Of Time Compiler,AOT)

标签:解释器,Java,字节,虚拟机,机器码,编译,编译器,引擎,执行
来源: https://blog.csdn.net/eclipse9527/article/details/119861841