深入拆解 Java 虚拟机
郑雨迪
Oracle 高级研究员,计算机博士
87446 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 40 讲
模块四:黑科技 (3讲)
深入拆解 Java 虚拟机
15
15
1.0x
00:00/00:00
登录|注册

36 | SubstrateVM:AOT编译框架

启动时间和内存开销优势
要求目标程序封闭
SubstrateVM的设计初衷
提升HotSpot虚拟机的启动性能
子项目:探索部署AOT编译的Graal编译器的可能性
目标:实现“Java-on-Java”
适合嵌入其他系统
与C程序相比:执行时间与内存开销优势明显
分为native image generator和SubstrateVM运行时
区别于jaotc:脱离HotSpot虚拟机、要求目标程序封闭
初衷:高启动性能、低内存开销、无缝衔接C代码的Java运行时
需要额外验证机制
加载动态共享库并部署机器码
借助Graal编译器
限制:无法进行完全虚方法内联、基于程序profile的投机性优化
优点:无需耗费CPU资源、启动时达到理想性能
与即时编译相对立
总结与实践
Metropolis项目
SubstrateVM的启动时间与内存开销
SubstrateVM的设计与实现
Java 9的实验性AOT编译工具
AOT编译
SubstrateVM: AOT编译框架

该思维导图由 AI 生成,仅供参考

今天我们来聊聊 GraalVM 中的 Ahead-Of-Time(AOT)编译框架 SubstrateVM。
先来介绍一下 AOT 编译,所谓 AOT 编译,是与即时编译相对立的一个概念。我们知道,即时编译指的是在程序的运行过程中,将字节码转换为可在硬件上直接运行的机器码,并部署至托管环境中的过程。
而 AOT 编译指的则是,在程序运行之前,便将字节码转换为机器码的过程。它的成果可以是需要链接至托管环境中的动态共享库,也可以是独立运行的可执行文件。
狭义的 AOT 编译针对的目标代码需要与即时编译的一致,也就是针对那些原本可以被即时编译的代码。不过,我们也可以简单地将 AOT 编译理解为类似于 GCC 的静态编译器。
AOT 编译的优点显而易见:我们无须在运行过程中耗费 CPU 资源来进行即时编译,而程序也能够在启动伊始就达到理想的性能。
然而,与即时编译相比,AOT 编译无法得知程序运行时的信息,因此也无法进行基于类层次分析的完全虚方法内联,或者基于程序 profile 的投机性优化(并非硬性限制,我们可以通过限制运行范围,或者利用上一次运行的程序 profile 来绕开这两个限制)。这两者都会影响程序的峰值性能。
Java 9 引入了实验性 AOT 编译工具jaotc。它借助了 Graal 编译器,将所输入的 Java 类文件转换为机器码,并存放至生成的动态共享库之中。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

SubstrateVM是GraalVM中的Ahead-Of-Time(AOT)编译框架,与即时编译相对立。AOT编译在程序运行之前将字节码转换为机器码,提高启动性能和降低内存开销。相比即时编译,AOT编译无法进行虚方法内联和基于程序profile的优化,但能避免CPU资源耗费。Java 9引入了实验性AOT编译工具,借助Graal编译器将Java类文件转换为机器码。SubstrateVM是基于Graal编译器的AOT编译框架,提供高启动性能、低内存开销,并能无缝衔接C代码的Java运行时。它脱离了HotSpot虚拟机,要求目标程序是封闭的,通过静态分析推算出所有虚方法调用的目标方法。SubstrateVM主要用于Java虚拟机语言的AOT编译,启动时间和内存开销较少,适合嵌入其他系统。运行在SubstrateVM上的Graal.js执行时间和内存开销都十分优越,适合嵌入至Oracle数据库中运行任意语言的预储程序。 SubstrateVM的轻量特性使其适合嵌入其他系统中。Metropolis项目旨在使用Java开发Java虚拟机,提升可维护性和开发效率。该项目探索部署AOT编译的Graal编译器的可能性,通过SubstrateVM技术将整个Graal编译器AOT编译为机器码,从而提升HotSpot虚拟机的启动性能。总体而言,SubstrateVM和Metropolis项目的结合将为Java开发者带来更高的性能和更便捷的开发体验。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《深入拆解 Java 虚拟机》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(7)

  • 最新
  • 精选
  • Jimbol
    老师好,写了这么多期,老师辛苦了!老师能否多写一些关于jvm性能优化调优,或者开发中常见的坑呢?太深奥的内容对一线开发来说好遥远

    作者回复: 嗯嗯,等我歇一段时间哈,这连续这么多期写得太累了。

    2018-10-12
    3
    13
  • 横云断岭
    请问SubstrateVM怎样调试?因为传统的java排查工具都失效了。使用方更加关注的是易用性。

    作者回复: 对于能够被SVM编译的(也就是不包含动态类加载等)Java应用程序而言,原则上SVM和HotSpot VM应该是等价的,能在HS跑就应该能在SVM上跑,否则就是SVM的bug了。 如果想要调试SVM本身或者SVM编译的Java应用的话,只能上GDB了。如果是SVM编译的Truffle语言的话,我们在Truffle语言层面实现了Chrome DevTools Protocal,可以直接用Chrome调试。

    2018-10-16
    1
  • 嘿,小战士
    编辑的多彩图片从开始用到了结束。相当统一⌓‿⌓

    编辑回复: 😄

    2023-01-27归属地:四川
  • wahaha
    老师,SubstrateVM以后会支持32位的X86和ARM处理器吗?

    作者回复: 32位X86暂时没计划,ARM应该会有,取决于RedHat以及我们负责Aarch64的工程师的效率。

    2018-10-13
  • dyangx
    今后有可能java 11会收费吗
    2018-10-21
    2
    4
  • BD
    在Java开源框架源码里经常看到一种写法,object a=new object; object b=a; 接下来直接操作b。我想问这里为什么不直接操作a非要“多此一举”的赋值给b再操作b呢
    2019-01-23
    1
    2
  • NullPointer
    谢谢老师辛勤付出,对于JVM有了通盘的理解,也有jvm未来发展。svm无意之间也为java-on-java做出不少努力,😁
    2019-10-08
    1
收起评论
显示
设置
留言
7
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部