JVM 执行引擎

概念

执行class文件中的指令,由解释器+编译器组成

补充------Java为什么是半编译半解释型语言

因为Java即有编译器也有解释器,可以用其中一种来运行。

程序执行步骤

解释器与编译器区别

编译器

概念

JIT(Just In Time Compiler)编译器,就是虚拟机将源代码直接编译成和本地机器平台相关的机器语言。

问题------为何有编译器还要有解释器

首先明确: 当程序启动后,解释器可以马上发挥作用,省去编译的时间,立即执行。 编译器要想发挥作用,把代码编译成本地代码,需要一定的执行时间。但编译为本地代码后,执行效率高。

所以: 尽管JRockit VM中程序的执行性能会非常高效,但程序在启动时必然需要花费更长的时间来进行编译。对于服务端应用来说,启动时间并非是关注重点,但对于那些看中启动时间的应用场景而言,或许就需要采用解释器与即时编译器并存的架构来换取一个平衡点。在此模式下,当Java虚拟器启动时,解释器可以首先发挥作用,而不必等待即时编译器全部编译完成后再执行,这样可以省去许多不必要的编译时间。随着时间的推移,编译器发挥作用,把越来越多的代码编译成本地代码,获得更高的执行效率。

使用场景

当一段代码一直被执行,执行次数超过规定的阈值,就会被判断为热点代码,那么JVM就是把这段代码进行编译,然后编译后的结果存储在方法区,以后用到这段代码就无需去解释运行了,直接使用编译后的结果即可

解释器

概念

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

  2. 解释器真正意义上所承担的角色就是一个运行时"翻译者",将字节码文件中的内容"翻译"为对应平台的本地机器指令执行。

  3. 当一条字节码指令被解释执行完成后,接着再根据PC寄存器中记录的下一条需要被执行的字节码指令执行解释操作

特点

速度慢,比起编译技术,这种技术速度慢,但是响应速度快,因为编译需要编译完成才能运行,而解释器解释一句运行一句。

相关推荐
ly768912 小时前
JVM 类加载机制:打破双亲委派模型的实践与陷阱
jvm·热部署·spi·类加载器·双亲委派
随遇而安zx15 小时前
【地基篇】---Java 8 JVM 知识大纲
java·开发语言·jvm
liangbo715 小时前
01-JVM 内存模型全景
java·jvm
ly768916 小时前
JVM 内存屏障与可见性:从 volatile 到 JSR-133 的底层实现
jvm·jit·volatile·内存屏障·jmm·jsr-133
晊晌_h1 天前
嵌入式从0到精通——线程
java·开发语言·jvm
cfm_29142 天前
JDK8+ JVM核心配置参数
jvm
煮煮论英雄2 天前
单文件部署的MQTT轻量级物联网数据平台
jvm·物联网·oracle
wuminyu3 天前
深入剖析 Panama Off-heap 的性能损耗与开销
java·linux·c语言·jvm·c++
uoKent4 天前
c++中new和malloc的区别
java·jvm·c++
~木雨4 天前
String 底层原理与常量池全解析:byte []+coder、intern 陷阱、substring 内存泄漏,一篇讲透
java·jvm·内存优化·string·字符串常量池