内容简介:Azul Systems推出Falcon,一个基于LLVM的新的Java即时编译器
近日, Azul Systems 发布了Zing 17.03。该版本完全支持Azul基于 LLVM 的新的 Java 即时(JIT)编译器Falcon。该编译器设计用来取代Zing先前版本以及Oracle HotSpot和OpenJDK使用的C2编译器。Falcon是1997年JavaOne大会推出C2以来Java SE的第一个新的生产用JIT编译器。
LLVM是一个现代化的开源编译器框架,也是Swift、Rust等许多新语言首选的后端“引擎”。它获得了学术界的大力支持,并且拥有包括AMD、Apple、Cray、IBM、Intel、 Microsoft、Sony和SAP在内的众多 商业支持者 。广泛的支持可以帮助它充分利用新的服务器硬件和新的指令集,它经常利用新的处理器技术,如Intel的Broadwell和Skylake处理器提供的矢量化和加密优化,早在其他语言之前提供这种支持。
Azul首席执行官Gil Tene告诉InfoQ:
使用LLVM为我们提供了巨大的优势,数以百计的人对它进行优化,让它与最新的处理器能力保持同步,这些成果可以立即应用到Java代码上。
关于这一点,一个简单具体的例子是,Falcon已经使用Intel最新的CPU(例如,当前Broadwell Intel E5-v4服务器上的AVX2指令集)所提供的最新/最棒的矢量指令功能来优化常规的Java循环。由于AVX2增加了谓词矢量运算能力,所以Falcon能够在循环(例如,“将数组中的偶数相加”)中矢量化在之前的硬件上无法矢量化的谓词操作,因此,同样的Java类在较新的服务器上执行速度更快。[目前]HotSpot甚至都没有试一下……
但最重要的是,我们获得了这种好处,不是通过一群Azul工程师花时间进行矢量化优化以及选择恰当的方法匹配每一种处理器。举例来说,我们是从Intel过去两年的投入以及他们将这些优化贡献给LLVM获益的。他们的贡献已经应用到了C/C++/Clang/Rust,就像(现在)应用到Java一样。
Falcon让我们可以做一些很酷的、JVM相关的优化,而使用C2则无法应用这些优化。GC屏障相关的优化就是其中的一个例子。此外还有更高层次的语言优化。关于更高层次的优化,一个具体的例子是,我们用较少的投入就在Falcon中引入了针对“真正final”字段的优化,在C2中引入的话,投入要多得多。[实例final字段的挑战在于,它们可能不是“真正final”的,因为反射和Unsafe可以重写它们,而且经常这样做]。Falcon能够优化Java中使用实例final字段的操作,它所采用的方式是以前的JIT不曾做过的(例如,将数组范围检查提取到循环之外)。过去的几年里,在HotSpot和Zing中,这一特性一直处于原型模型开发阶段(在OpenJDK的部分邮件列表中可以找到相关讨论),但之前从没有在哪个JVM中实现产品化,其中有一部分原因是让JIT编辑器处理得很好复杂度很高。
有鉴于此,Falcon在新硬件上性能超过C2就不奇怪了。例如,Tene告诉InfoQ,在特定的加密负载基准测试中,它比Oracle HotSpot快3.5倍,比Oracle HotSpot使用基于Skylake的服务器(Intel Xeon E5-xxxx)进行Cassandra基准测试快大约10%。另外,在低延迟环境中,它也比Zing以前的版本快许多。按照Tene的说法,一个运行交易基础设施的Azul Zing客户观察到了大约18~24%的速度提升。
Azul是第一个在生产级托管运行时中使用LLVM的组织。为了完成这项工作,LLVM借助Azul提供的其他功能进行了增强,包括安全点和GC屏障方面的优化,提供JIT代码替换和逆优化的能力,包括隐式null检查、预测去虚拟化及保护内联在内的预测运行时优化。
如你所料,Falcon还支持Azul在2014年推出的 ReadyNow 技术。按照设计,ReadyNow是为了避免Java虚拟机“预热”,鉴于JVM有足够的时间学习哪些代码要编译成机器级,应用程序所有者试图通过这种方法充分利用JIT编译器优化。
现有用户可以从Zing支持门户上直接下载Zing 17.03。Azul网站上也提供了Zing新版本的 30天试用 。Zing单许可的全年订阅价为每台服务器3500美元,大量许可长期订阅价格会低许多。
5月4日,太平洋时间上午11点,Azul首席技术官Gil Tene举办了一场题为“ 走进Falcon编译器 ”的网络研讨会。研讨会加Q&A持续了约一小时。
查看英文原文: Azul Systems Launches Falcon, a New Just-in-Time Compiler for Java, Based on LLVM
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- LLVM接受NVIDIA的“f18” Fortran编译器作为官方Fortran编译器
- 编译原理实战入门:用 JavaScript 写一个简单的四则运算编译器(四)结语
- Scala.js 0.6.29 发布,将 Scala 编译成 js 的编译器
- Go 编译器介绍
- Go 编译器介绍
- C++编译器优化
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
多任务下的数据结构与算法
周伟明 / 华中科技 / 2006-4 / 58.00元
本书和传统同类书籍的区别是除了介绍基本的数据结构容器如栈、队列、链表、树、二叉树、红黑树、AVL树和图之外,引进了多任务;还介绍了将任意数据结构容器变成支持多任务的方法;另外,还增加了复合数据结构和动态数据结构等新内容的介绍。在复合数据结构中不仅介绍了哈希链表、哈希红黑树、哈希AVL树等容器,还介绍了复合数据结构的通用设计方法;在动态数据结构中主要介绍了动态环形队列、动态等尺寸内存管理算法。在内存......一起来看看 《多任务下的数据结构与算法》 这本书的介绍吧!