java JVM 学习总结YZP专栏—主目录—持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123210715 |
---|
Oracle的黑科技Graal VM |
---|
Graal即时编译器 |
---|
Substrate VM解决Graal VM的重量级负担,以及JDK新版功能清单中的解决措施 |
---|
- 提前编译:好处是Java虚拟机加载这些已经预编译成二进制库的东西,能够直接调用,无需等待即时编译器在运行时将其编译成二进制机器码。可以减少即时编译带来的预热时间。但是破坏了“一次编写,到处运行”的承诺,必须为每个不同的硬件、操作系统去编译对应发行包,显著降低Java链接过程的动态性,必须要求加载的代码再编译器全部已知,不能运行期才确定,否则只能舍弃已经提前编译好的版本,回退到即时编译执行
- JDK 9 提供jaotc命令进行提前编译,但不是生成本地代码完全脱离Java虚拟机,只是代替即时编译,编译一部分代码,仍然需要运行在HotSpot之上
- Substrate VM出现,满足了人们对Java提前编译的期待。在Graal VM0.2,0版本出现的极小型运行时环境,包括了独立的异常处理、同步调度、线程管理、内存管理(垃圾收集)和JNI访问等组件,目标是代替HotSpot用来支持提前编译后的程序执行。
- 还包括一个本地镜像构造器(Native Image Generator),为用户程序建立Substrate VM的本地运行时镜像,采用指针分析(Points-To Analysis)技术,从用户提供程序入口出发,搜索所有可达代码,搜索时,还会执行初始化代码,最终生成可执行文件时,将已初始化的堆,存入一个堆快照中,这让Substrate VM可以直接从目标程序开始运行,无须重复进行Java虚拟机的初始化过程。
- 原理上决定,Substrate VM必须要求目标程序完全封闭,不能动态加载其它编译器不可知的代码和类库。遵循这些,Substrate VM才能探索整个编译空间,并通过静态分析推算出所有虚方法调用的目标方法
- 可以显著降低内存占用及启动时间,补全了Graal VM在任何地方更快运行任何代码的最后一块拼图,让Graal VM支持其它语言时不会有重量级的运行负担。
HotSpot虚拟机的未来 |
---|
语法糖 |
---|
- Project Panama:目的是消弭Java虚拟机与本地代码之间的界线,提供更好的方式让Java代码与本地代码进行调用和传输数据
本文是我的JVM的学习笔记,可以当做复习和参考资料,如果想要真正学会,还是要去看书哦!我学习JVM的书籍如下 |
---|