0
点赞
收藏
分享

微信扫一扫

【运维工程师学习二】OS系统管理

kmoon_b426 2023-06-30 阅读 78

JVM 执行引擎

javac 编译器将 Java 代码编译成 class 文件 (前期编译),再给 JVM 根据不同平台 , 通过执行引擎转为机器码

image.png

JVM 用 : 混合模式 (解释+编译) :

  • 对不常用代码,不浪费时间编译成机器码,用时以解释运行
  • 对热点代码,用编译方式,追求更高效率

解释执行

Interpreter : 将字节码逐条换成机器码

  • 刚开始只用解释执行,当某些方法或代码块 , 执行较频繁,就转为热点代码

即时编译器

Just-In-Time compilation(JIT) : 将字节码编译成可执行文件,运行速度快

  • 即时编译器将热点代码编译成机器码,并优化,存到内存中

HotSpot 内置两个JIT :

  • C1 : Client Compiler : 适用执行时间短或 对启动性能有要求的程序
  • C2 : Server Compiler : 适用执行时间长或 对峰值性能有要求的程序

Java7 后,HotSpot 用分层编译的方式

  • 热点方法先被 C1 编译,再热点中的热点 , 被 C2 再编译

AOT

Java9 后 ,引入AOT(Ahead-Of-Time) 编译器

  • 程序运行前,将字节码转为机器码
  • 优势 :不用运行时 , 消耗资源来进行即时编译
  • 劣势 : 无法感知程序运行时信息,无法基于类层次分析的完全虚方法内联,或基于程序 profile 的投机性优化

Graal VM

Java10 后,引入 Graal 编译器

  • 比 C1, C2,模块化明显,更易维护
  • Graal 既能动态编译器,有能静态编译器
  • 能编译不同的编程语言 , 成为二进制码,实现不同语言的无缝切换
举报

相关推荐

0 条评论