深入拆解Java虚拟机
郑雨迪
Oracle 高级研究员,计算机博士
立即订阅
27940 人已学习
课程目录
已完结 39 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 为什么我们要学习Java虚拟机?
免费
模块一:Java虚拟机基本原理 (12讲)
01 | Java代码是怎么运行的?
02 | Java的基本类型
03 | Java虚拟机是如何加载Java类的?
04 | JVM是如何执行方法调用的?(上)
05 | JVM是如何执行方法调用的?(下)
06 | JVM是如何处理异常的?
07 | JVM是如何实现反射的?
08 | JVM是怎么实现invokedynamic的?(上)
09 | JVM是怎么实现invokedynamic的?(下)
10 | Java对象的内存布局
11 | 垃圾回收(上)
12 | 垃圾回收(下)
模块二:高效编译 (12讲)
【工具篇】 常用工具介绍
13 | Java内存模型
14 | Java虚拟机是怎么实现synchronized的?
15 | Java语法糖与Java编译器
16 | 即时编译(上)
17 | 即时编译(下)
18 | 即时编译器的中间表达形式
19 | Java字节码(基础篇)
20 | 方法内联(上)
21 | 方法内联(下)
22 | HotSpot虚拟机的intrinsic
23 | 逃逸分析
模块三:代码优化 (10讲)
24 | 字段访问相关优化
25 | 循环优化
26 | 向量化
27 | 注解处理器
28 | 基准测试框架JMH(上)
29 | 基准测试框架JMH(下)
30 | Java虚拟机的监控及诊断工具(命令行篇)
31 | Java虚拟机的监控及诊断工具(GUI篇)
32 | JNI的运行机制
33 | Java Agent与字节码注入
模块四:黑科技 (3讲)
34 | Graal:用Java编译Java
35 | Truffle:语言实现框架
36 | SubstrateVM:AOT编译框架
尾声 (1讲)
尾声 | 道阻且长,努力加餐
深入拆解Java虚拟机
登录|注册

36 | SubstrateVM:AOT编译框架

郑雨迪 2018-10-12
今天我们来聊聊 GraalVM 中的 Ahead-Of-Time(AOT)编译框架 SubstrateVM。
先来介绍一下 AOT 编译,所谓 AOT 编译,是与即时编译相对立的一个概念。我们知道,即时编译指的是在程序的运行过程中,将字节码转换为可在硬件上直接运行的机器码,并部署至托管环境中的过程。
而 AOT 编译指的则是,在程序运行之前,便将字节码转换为机器码的过程。它的成果可以是需要链接至托管环境中的动态共享库,也可以是独立运行的可执行文件。
狭义的 AOT 编译针对的目标代码需要与即时编译的一致,也就是针对那些原本可以被即时编译的代码。不过,我们也可以简单地将 AOT 编译理解为类似于 GCC 的静态编译器。
AOT 编译的优点显而易见:我们无须在运行过程中耗费 CPU 资源来进行即时编译,而程序也能够在启动伊始就达到理想的性能。
然而,与即时编译相比,AOT 编译无法得知程序运行时的信息,因此也无法进行基于类层次分析的完全虚方法内联,或者基于程序 profile 的投机性优化(并非硬性限制,我们可以通过限制运行范围,或者利用上一次运行的程序 profile 来绕开这两个限制)。这两者都会影响程序的峰值性能。
Java 9 引入了实验性 AOT 编译工具jaotc。它借助了 Graal 编译器,将所输入的 Java 类文件转换为机器码,并存放至生成的动态共享库之中。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《深入拆解Java虚拟机》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(6)

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

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

    2018-10-12
    6
  • dyangx
    今后有可能java 11会收费吗
    2018-10-21
    1
    3
  • asc
    谢谢老师辛勤付出,对于JVM有了通盘的理解,也有jvm未来发展。svm无意之间也为java-on-java做出不少努力,😁
    2019-10-08
  • BD
    在Java开源框架源码里经常看到一种写法,object a=new object; object b=a; 接下来直接操作b。我想问这里为什么不直接操作a非要“多此一举”的赋值给b再操作b呢
    2019-01-23
  • 横云断岭
    请问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
  • wahaha
    老师,SubstrateVM以后会支持32位的X86和ARM处理器吗?

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

    2018-10-13
收起评论
6
返回
顶部