屌炸天,Oracle 发布了一个全栈虚拟机 GraalVM,支持 Python!

摘要:
几天前,甲骨文发布了一项黑科技“GraalVM”,它被称为具有高性能、跨语言交互和其他不利特性的新型通用全栈虚拟机。它是如此神奇吗?GraalVM简介GraalVM是一种跨语言通用虚拟机。它不仅支持基于JVM的语言,如Java、Scala、Groovy、Kotlin和基于LLVM的语言,例如C、C++,还支持其他语言,如JavaScript、Ruby、Python和R。结合以上特性,让我们来看看GraalVM的架构图。GraalVM版本的介绍如下图所示。GraalVM提供两个版本:社区版和企业版。

前阵子,Oracle 发布了一个黑科技 “GraalVM”,号称是一个全新的通用全栈虚拟机,并具有高性能、跨语言交互等逆天特性,真有这么神奇?

GraalVM 简介

GraalVM 是一个跨语言的通用虚拟机,不仅支持了 Java、Scala、Groovy、Kotlin 等基于 JVM 的语言,以及 C、C++ 等基于 LLVM 的语言,还支持其他像 JavaScript、Ruby、Python 和 R 语言等。

GraalVM 有以下几个特性。

  • 更加高效快速的运行代码
  • 能与大多数编程语言直接交互
  • 使用 Graal SDK 嵌入多语言
  • 创建预编译的原生镜像
  • 提供一系列工具来监视、调试和配置所有代码

官网:http://www.graalvm.org/

GraalVM 有什么用?

1、支持多种语言组合编程

来看下面这段代码,来自官网。

const express = require('express');
const app = express();
app.listen(3000);
app.get('/', function(req, res) {
  var text = 'Hello World!';
  const BigInteger = Java.type(
    'java.math.BigInteger');
  text += BigInteger.valueOf(2)
    .pow(100).toString(16);
  text += Polyglot.eval(
    'R', 'runif(100)')[0];
  res.send(text);
})

它同时使用了 Node.js、Java、R 三种语言,是不是很奇葩?

GraalVM 消除了各种编程语言之间的隔离性,那这种多编程语言结合使用会不会有性能影响?官方的说明是:零开销的互操作,这样,我们就可以为应用程序选择最佳的编程语言组合。

2、原生镜像加速

来看这段代码,同样来自官网。

$ javac HelloWorld.java
$ time java HelloWorld
user 0.070s
$ native-image HelloWorld
$ time ./helloworld
user 0.005s

GraalVM 可以预编译成原生镜像,从而极大提速了启动时间,并能减少 JVM 应用的内存占用。

4、可嵌入式运行环境

GraalVM 可以被嵌入到各种应用程序中,既可以独立运行,也可以在已经内置好的 OpenJDK、Node.js、Oracle、MySQL 等环境中运行。

结合上面的特性,我们来看下 GraalVM 的架构图。

image

GraalVM 版本介绍

如下图所示,GraalVM 提供了社区版和企业版两个版本。

image

从特性来看,上述所说的高性能、内存优化貌似都在企业版中??企业版或者可能只是在社区版上又增加了额外的提升吧!

社区版下载:github.com/oracle/graal/releases

总结

GraalVM 这玩意看起来很不错,可以说这就是一个全栈开发平台,不仅支持主流编程语言,还能组合在一起编程,根据不同任务来选择最佳的语言。另外。它还能提高更高的执行效率,以及占用更少的内存。

至于应用场景,是否可应用于生产,现在还真不好说。这么一个变态级的产品,我们期待它有更好的发展吧。

@ 程序猿:你们觉得 GraalVM 前景如何,或者有什么实际用途?欢迎留言!

资料:成为架构师的十阶段学习资料!

教程:史上最强 Spring Boot & Cloud 教程汇总

工具:推荐一款在线创作流程图、思维导图软件

扫描关注我们的微信公众号,回复 “666” 可获取一套Java并发编程高清视频教程。

image

免责声明:文章转载自《屌炸天,Oracle 发布了一个全栈虚拟机 GraalVM,支持 Python!》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Bootstrap-datepicker3官方文档中文翻译---Event/事件(原文链接 http://bootstrap-datepicker.readthedocs.io/en/latest/index.html)Flask-websocket实现聊天功能下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

django -过滤器的使用

前情提要:   最近工作中用到django 中的      自定制过滤器的内容, 再此 复习一波过滤器和自定制 过滤器的内容 自定制过滤器   1、在settings中的INSTALLED_APPS配置当前app,不然django无法找到自定义的simple_tag. 2、在app中创建templatetags模块(模块名只能是templatetags)...

QQ会员AMS平台PHP7升级实践

作者:徐汉彬链接:https://zhuanlan.zhihu.com/p/21493018来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。QQ会员活动运营平台(AMS),是QQ会员增值运营业务的重要载体之一,承担海量活动运营的Web系统。AMS是一个主要采用PHP语言实现的活动运营平台, CGI日请求3亿左右,高峰期达到8亿...

用Python操作git命令

import os from git.repo import Repo from git.repo.fun import is_git_dir class GitRepository(object): """ git仓库管理 """ def __init__(self, local_path, repo_url, br...

Oracle归档日志与非归档日志的切换及路径设置

--==================== -- Oracle 归档日志 --==================== Oracle可以将联机日志文件保存到多个不同的位置,将联机日志转换为归档日志的过程称之为归档。相应的日志被称为归档日志。 一、归档日志 是联机重做日志组文件的一个副本 包含redo记录以及一个唯一的log sequence number...

Xamarin.Forms 启动App时获取屏幕宽高

启动App时获取屏幕宽高 App.cs里面添加: publicstaticdoubleScreenWidth; publicstaticdoubleScreenHeight; Android下 MainActivity.cs里面添加: protectedoverridevoidOnCreate(Bundlebundle) { TabL...

jupyter之配置自己喜欢的python环境

之前安装anaconda,会自动安装jupyer笔记本,但是本人从来没有用过,近期查看github上的一些教程时,发现很多文件都是.ipynb为后缀的jupyter文件,于是自己准备琢磨一下把环境换成已有的py环境(我自己设置的python环境中有一些之前安好的包),毕竟jupyer的界面比ipython啥的要好看很多,也方便修改和可视化。 一、查看jup...