JVM-执行引擎

169 阅读2分钟
八、执行引擎

稀掘星球的朋友们,大家好,我是斯基,前面我们花了一大波时间介绍JVM的运行时数据区,现在到了这个阶段的关键时候了,运行时的数据怎么才能交给CPU让它执行呐,这就需要执行引擎来帮我们干活啦!

(一)执行引擎概述

我们知道JVM的作用是将字节码文件装载到其内部,但是字节码文件不能直接运行在操作系统上,因为字节码指令并非等价于本地机器指令,它内部包含的仅仅只是一些能够被JVM识别的字节码指令、符号信息,外加其他辅助信息;

那如何让一个Java程序运行起来,就需要借助执行引擎(将字节码指令通过解释、编译为对应平台的本地机器指令)

(二)执行引擎构成

  • 解释器 当程序启动,Java虚拟机会根据预定义的虚拟机规范对字节码文件进行逐行解释,将字节码文件翻译成对应平台的机器语言指令,其特点就是响应快
  • JIT编译器 虚拟机将源代码翻译成本地机器语言指令,当程序启动时,解释器可以先发挥作用,不用等JIT编译器全部编译后执行,这样也就节省了很多不必要的编译时间,随着时间的推移,把越来越多的编译成本地代码无疑会加快执行效率; 当然是否启动JIT编译器将字节码直接编译成本地机器码指令是需要根据代码执行的频度来的,这些代码也称之为“热点代码”

(三)热点代码探测

目前HotSpot VM所采用的热点探测技术是基于计数器的热点探测,针对方法循环体结构分别有两种计数器

  • 方法调用计数器 方法调用用于统计方法的调用次数,client模式下阈值是1500次,server模式下阈值是10000次,只有超过这个数才会进行JIT编译; 当然随着时间推移,方法计数器必然会超过阈值,那么就需要一个时间限度去做热度的衰减,如果在一个时间限度内调用次数没超过阈值,那么这个方法的调用计数器就减一半,也叫半衰周期;

image.png

  • 回边计数器

image.png