JVM
一、HotSpot虚拟机中含有两个即时编译器
1 .C1 编译耗时短输出代码优化成都较低的但输出代码程度较低的客户端编译器
2.C2编译耗时长输出代码优化程度也更高但输出代程度也高的客户端编译器
Graal 编译器是C2的替代者 Sea-of-Nodes高级中间表示High IR形式
C2->Graal 但是 Graal-X-C2
2.1Graal比C2更加复杂的优化
部分逃逸分析 激进预测性优化 支持预测性假设
二、向Native迈进
现阶段java缺点:
不需要长时间运行 小型化的应用 不需要跑百兆jre 大型单体应用架钩向小型微服务应用框架发展的技术潮流下
单个微服务不需要数十数百的内存 而是高可用的服务集群 单个服务要7*24小时不间断运行 随时中断更新 现在的只需要启动快 高性能 执行时间短
在最近几个jdk
已经陆续推出跨进程可以面向用户程序的类型信息缓存 提升下一次启动熟读 appCDS 开始支持用户的程序代码 无操作垃圾收集器
注意:提前编译是相对提前编译的概念 提前编译能带来最大好处java虚拟机加载已经编译成二进制库之后就够直接掉哟是哪个 无需等待及时编译器在运行是将其编译成二进制机器码 理论上可以减少及时编译带来的预热时间减少java应用场给人带来的第一运行慢的不良体验
破坏java 一次编写到处运行的承诺 必须威每个不统的ing吉安操作系统去编译不同硬件擦欧总系统去编译对应的发行包 也显著见底了java链接过程的动态习惯 必须要求加载的代码在编译期就已经全部已知 而不幸在运行期踩确定
目前可以有这种显示的是:C2->GraalVM2.0 ->SubStrate VM
SubStrate Vm带来的好处就是显著降低了内存占用以及启动时间 由于HotSpot本身有一定的内存消耗 最低也要几十MB Sub VM 其内存占用和启动时间与运行在HotSpot上相比有5-50倍差距
Graal VM支持其他语言不会有重量的运行负担 运行内存3,4M 速度与V8持平
三、重构 HotSpot架构 具有模块华能力和足够开放性 监控 执行编译 内存管理
已经增强语言
正在改进中语言
四、获取源码
openJDK日益成熟
第一种获取
第二种获取
]