Focus On Oracle

Installing, Backup & Recovery, Performance Tuning,
Troubleshooting, Upgrading, Patching

Oracle Engineered System


当前位置: 首页 » 技术文章 » Cloud

Oracle GraalVM

Graal — 新的 JVM 即时编译器

Graal是一个用 Java 编写的新的JVM即时编译器,侧重性能和语言互操作性。Graal 为Java代码提供性能优势,这得益于方法内联、流转对象分配和推理执行等新技术,从而可以实现高性能的脚本语言引擎。

与传统的 HotSpot 编译器不同,脚本语言解释器可以使用 Graal 包含的 Truffle API 发出原生代码,这样无需提前编译,即可让编程语言获得 Java 的性能。
语言解释器可以使用 HotSpot 所用技术提高 Java 代码的速度 — 包括发出优化的原生代码(含去优化 的条件)— 该技术令即时编译的代码在性能方面优于提前编译的代码。
提供了一个技术预览版下载Graal (GraalVM 1.0基于JDK 8),很快就可用作 JDK 9 的附加组件。当前版本是一个独立的 JDK,包含 Graal。

GraalVM 将 Graal 用作实时编译器,可以在 Java HotSpot VM 中执行 Java 应用。

GraalVM是一个通用的虚拟机(运行环境),用于运行用JavaScript、Python 3、Ruby、R、Java、Scala、Kotlin和基于LLVM-based的语言(如C和c++)编写的应用程序。她的优点就是可以让程序语言互相调用访问对方的对象而不需要事先进行转换。例如开发者可以用Node.js访问Java库,还是以Java调用Python程序。这种弹性开发,能让开发人员使用最适合的语言完成任务。

GraalVM移除了编程语言之间的隔离,并支持共享运行时中的互操作性。它可以独立运行,也可以在嵌入到OpenJDK,Node.js,Oracle Database或MySQL环境下运行。

截止目前,Oracle提供了两种类型的License。一个是社区版本(Community Edition),可以从github上下载;一个是企业版(Enterprise Edition),需要从Oracle网站上下载。他们的主要区别在于License,还有就是企业版的在高性能,安全性,扩展性上支持的更好。

GraalVM执行Java有哪些主要优势?

Graal 专注于为长时间运行的复杂 Java 应用提供卓越的峰值性能。当我们仍致力于进一步提高 Graal 处理传统负载的性能时,Graal 已经为一些程序提供了比现有编译器更好的峰值性能。特别是,使用非传统字节码模式的应用(例如,Scala 应用、大量 Stream API 和 lambda 用户)从 Graal 中受益。

Graal 的峰值性能主要源自三个因素:

新的内联方式:Graal 采用了一种新的内联方式,无需考虑 Java 字节码大小,而是在作出最终决定之前模拟内联的好处。
部分逃逸分析:Graal 通过充分证明对象的线程局部性或者将分配插入不经常执行的分支,可以删除对象分配。
推测优化:编译器设计的一个主要组成部分是为推测优化提供一流的支持。这尤其有利于基于 Graal 执行动态语言。
如何在GraalVM上执行Java应用?
GraalVM为Java应用提供了一个编译器和执行系统(虚拟机)。您可以使用一个命令行shell像使用其他Java VM一样执行任何Java程序。
    # export PATH=/path/to/graalAndTruffle/bin:$PATH
    # java myJavaClass
    or
    # java -jar myJavaApp.jar
您可以使用 java -version 命令验证您在使用 GraalVM。输出应包含“Graal VM”,如下所示:
    # java -version
    java version "1.8.0_11"
    Java(TM) SE Runtime Environment (build 1.8.0_11-b12)
    OpenJDK 64-Bit Graal VM (build ...)
GraalVM的Polyglot 引擎允许适用于其他编程语言的语言解释器的执行和互操作性。这个版本的 GraalVM 包含适用于三种语言(JavaScript、Ruby 和 R)和一种教学语言 (SimpleLanguage) 的语言解释器。

JavaScript:Graal.js

Graal.js 是符合 ECMAScript 262 2015 版的 JavaScript 引擎。它基于 Polyglot 引擎,使用 Graal 作为编译器,确保了与其他基于 Truffle 的语言引擎的高性能和语言互操作性。
Graal.js 有哪些主要优势?
峰值性能:使用 Graal.js 执行、使用 Graal 编译的 JavaScript 应用,其峰值性能优于领先的 JavaScript 引擎。
服务器端 JavaScript:Graal.js 能够运行服务器端 Node.js 应用(利用 Avatar.js 项目)。针对各种 Node.js 应用提供了初步支持,为所有目前正在开发的 Node.js 应用提供完整性。
语言互操作性:Graal.js 的另一个目标是提供与其他 Polyglot 语言和 Java 的互操作性的同时不牺牲性能。
如何使用 Graal.js 执行 JavaScript 应用?
该版本为 JavaScript 应用提供了一个执行系统。您可以使用该版本中包括的 js 命令在命令行 shell 上执行符合 ECMAScript 6 的 JavaScript 程序。
     # js mySourceFile.js
实际使用此版本的 js 命令时请注意,例如,将 bin 目录添加到路径︰
     # export PATH=/path/to/GraalVM/bin:$PATH
如何使用 Graal.js 执行 Node.js 应用?
您还可以使用节点可执行程序执行 Node.js 应用。该版本的 example/node 目录中提供了一些示例应用
     # node myNodeApplication.js
有关更多详细信息,请参见该版本的自述文件
Ruby:RubyTruffle
RubyTruffle 是 Ruby 2.2 的一个实现。它基于JRuby项目,但使用 Polyglot 引擎和Graal作为编译器,所实现的峰值性能远超当前Ruby实现。 RubyTruffle 使用 RubySpec 进行测试,实现了与Ruby 语言和核心库超过 90% 的兼容性。Sinatra和Roda等简单的gem和框架可以工作,但RubyTruffle尚未准备好运行大型复杂应用或Rails 框架。
RubyTruffle 有哪些主要优势?
峰值性能:使用 Graal 编译器,RubyTruffle 在基准测试和实际应用代码中达到性能远超任何当前的 Ruby 实现。
快速元编程:RubyTruffle 旨在 Ruby 实际使用过程中对其进行优化 — 包括元编程。动态发送、动态定义的方法、绑定和求值等操作速度都很快。
如何使用 RubyTruffle 运行 Ruby 应用?
     # ruby my_source_file.rb
我如何使用 RubyGems 或 Bundler?
RubyTruffle 还不能运行 RubyGems 或 Bundler。在此之前,我们提供了一个工具,可用于安装一个 Ruby 应用,以便其运行。
setup 命令将 gem 安装到本地目录中。
     # ruby-tool setup
然后,run 命令对这组 gem 运行可执行文件。
     # ruby-tool run bin/my_application
例如
     # git clone https://github.com/lucasocon/openweather.git
     # cd openweather
     # ruby-tool setup
FastR
FastR 是基于 Graal 的 R 语言实现。它使用最新的 Graal 技术实现高性能,而且尽量不影响与 GNUR 的兼容性。
FastR 有哪些主要优势?
峰值性能:使用 FastR 执行、使用 Graal 编译的 R 应用性能优于现有 R 执行引擎。
兼容性:R 的目标是与 GNUR 完全兼容。使用 R 参考实现开发的现有应用程序无需更改即可运行。
语言互操作性:提供与其他基于 Graal 的语言(如 Java、Ruby 或 JavaScript)的互操作性,不会牺牲性能。
如何使用 FastR 运行 R 应用?
可以通过以下方式启动 R 语言 shell:
 # ./bin/R
可以使用以下命令运行 R 脚本:

 # ./bin/RScript mySourceFile.js


一些开源语言实现基于Graal和Polyglot引擎:
    RubyTruffle:https://github.com/jruby/jruby/wiki/Truffle
    FastR:https://bitbucket.org/allr/fastr
    ZipPy (Python):https://bitbucket.org/ssllab/zippy


Reference

http://www.oracle.com/technetwork/oracle-labs/program-languages/overview/index.html
http://www.oracle.com/technetwork/cn/oracle-labs/program-languages/overview/index-2301583-zhs.html
https://github.com/oracle/graal
http://www.graalvm.org/

http://www.graalvm.org/docs/reference-manual/languages/llvm/


关键词:graal cloud 

相关文章

Terraform,docker,wercker,k8s
Vagrant with oracle
Oracle自治数据仓库云
OMC - How to Install Gateway Agent
Oracle大数据之交互式快速参考
Oracle数据库云服务
Oracle数据库备份云服务
Oracle RAC and Third Party Cloud
Oracle Database Multilingual Engine(MLE)
Oracle GraalVM
Oracle JET
Oracle REST Data Services
Top