全栈虚拟机GraalVM初体验

JVM 的“救世主”来了?---GraalVM 集成入门 本文简单地介绍了 GraalVM 的使用,但 GraalVM 的 Native Image 目前并不完善,比如对 Spring 的支持还很有限,Spring 有对应的)工程,该工程还没有 Release,问题很多。不过在今年晚些时候应该可以 Ready,届时我们再一起体现下 Spring Native 的魅力。 阅读详情

官方介绍

近日Oracle开源了一个实验性的产品GraalVM,官方称之为Universal GraalVM。它打通了不同语言之间的鸿沟,让我们可以进行混合式多语言编程。

640?wx_fmt=png

你可能会当心不同语言之间的互操作会不会带来性能上的问题。GraalVM说不会,你可以随意在多种不同语言之间窜来窜去,性能都不是问题。它完全不同于JVM里面的JRuby、Jython这些library。

640?wx_fmt=png

看到这里,你须明白,GraalVM可能不止是一个玩具,它能真得跑起来大型应用。

图中的例子同时用了NodeJS、Java和R语言,拿node平台的express框架跑起了一个简单的web服务器。

GraalVM支持镜像加速,类似于Android的Ahead-Of-Time编译,将程序编译为原生的二进制程序,加速程序启动过程。

640?wx_fmt=png

我们看到这性能至少提速了一个数量级。Spring启动蜗牛慢的问题有可能首先被GraalVM解决。

GraalVM可以内置到不同的运行环境。目前已经可以内置到Node、Java、Oracle和MySQL这几个产品中。

640?wx_fmt=png

下载安装

接下来我们亲自体验一下GraalVM的神奇魅力。

首先进入下载页面,OMG,竟然同时提供了社区版和企业版,看来GraalVM真不止是个玩具。

糟糕,社区版目前不支持mac,还得在龟慢的github上下载。

企业版支持mac,还好,可以试用,但是下载要注册Oracle账号,国外的网站访问真是龟慢。耐心!耐心!耐心!

填写了一番冗长的注册表单后,总算可以下载了,又是龟速啊。

640?wx_fmt=png

改用迅雷,迅雷快,也就快了一小会,迅速从500k/s降低到50k/s,又回到了100k/s。还是喝杯咖啡先。

640?wx_fmt=jpeg

总算下完了,大概花了1个小时。

640?wx_fmt=png
640?wx_fmt=png
640?wx_fmt=png

图中的紫色命令是GraalVM提供的比较特殊的命令

  1. js 运行在GraalVM之上的javascript命令行

  2. node 跟普通的node一样,区别是运行在GraalVM之上

  3. java 跟普通的java一样,区别是运行在GraalVM之上

  4. lli 运行在GraalVM之上的llvm字节码执行器,C和C++代码会编译成llvm字节码,然后通过它来运行

  5. native-image 预编译程序文件生成快速二进制文件,用于加速启动程序

  6. gu 其它的语言像Python、Ruby和R的支持都是通过gu进行安装的

640?wx_fmt=png

因为小编此时无法翻墙,所以只好放弃ruby和python的安装了。

版本信息

640?wx_fmt=png

可以看到这些命令的版本信息里除了node之外都携带了Graal单词。

运行

640?wx_fmt=png
640?wx_fmt=png

使用native-image进行预编译之后会生成一个二进制文件,然后对比前后运行时间发现预编译前后执行性能明显提升。native-image耗时较长,因为要做大量的代码静态分析,大约耗时1分钟。

640?wx_fmt=png

C语言需要先编译成llvm的字节码程序hello.bc,然后才能让lli命令执行。

640?wx_fmt=png

javascript解释器,全局对象console、Math、Date都有了。

640?wx_fmt=png
640?wx_fmt=png

不可思议,npm可以直接安装第三方包,使用GraalVM提供的node能正常运行。npm也是GraalVM内置的程序。

解决了哪些痛点

GraalVM的混合式多语言编程可以解决开发者的以下常见问题

  1. 那个库我这个语言没有,我TM得自己撸一个

  2. 那个语言最适合解决我这个问题,但是我这个环境下跑不起来

  3. 这个问题已经被我的语言解决了,但是我的语言跑起来太慢了

通过使用Polyglot API,GraalVM要给开发者带来真正的语言级自由。

Polyglot工作原理

GraalVM提供了一种在不同语言之间可以无缝传值的方法,而不需要像其它虚拟机一样进行序列化和反序列化。这样就保证了跨语言也能继续保持高性能。

GraalVM开发了「跨语言互操作协议」,它是一种特殊的接口协议,每种运行在GraalVM之上的语言都要实现这种协议,这样就能保证跨语言的互操作性。

640?wx_fmt=png

弱化主语言

GraalVM开发了一个实验性的启动器「polyglot」。在polyglot里面不存在主语言的概念,每种语言都是平等的,可以使用polyglot运行任意语言编写的程序,而不需要前面的每种语言单独一个启动器。polyglot会通过文件的扩展名来自动分类语言。

640?wx_fmt=png

Shell

GraalVM还开发了一个动态语言的Shell,该Shell默认使用js语言,可以使用命令切换到任意其它语言进行解释操作。

640?wx_fmt=png

最后

不幸的是,GraalVM是Oracle的产品,它要是能像Google这样节操多点,GraalVM也许会是一个非常完美的产品。

关注公众号「码洞」,让我们一起来进一步深入讨论GraalVM。

graalvm把java编译为c/c++能够使用的动态库(dll/so) 阅读详情

相关推荐

云原生的虚拟机王者GraalVM

哈喽,大家好,我是指北君。 今天给大家推荐的是 Oracle Labs 开源的跨语言全栈虚拟机—— GraalVM 。 对不需要长时间运行的、小型化的应用来说, Java 天生就带有一些劣势,特别是近几年从大型单体应用架构向小型微服务应用架构发展,再进一步上云原生技术潮流下, Java 表现出来很多不适应。 体现在单个微服务随时可以中断和更新的场景中, Java 启动时间相对较长、需要预热才能达到最高性能的特点,这种不适应尤为明显。 而在无服务架构中,上面的不适应更加突出。相比服务,一个函数的规模通常小,执

kyzb2022的博客 4544

GraalVM 学习笔记

00GraalVM发展背景 熟悉Java的开发者都听说过HotSpot JVM虚拟机的鼎鼎大名,但是在线上业务逐渐往云原生、微服务架构推动的当下,以HotSpot虚拟机为代表的上一代虚拟机也面临着诸多问题。云原生和微服务的时代,对线上系统的性能有了更高的要求,同时基础架构建设的成本需要得到控制。 某种程度上说,速度(包括但不限于运行速度、编译速度等)、灵巧性(可移植、可复用等)和轻量级是掌控当前线上运行环境的关键。 2022年1月18日,Oracle公...

yuhouwucaihong的博客 4137

GraalVM入门以及环境搭建

GraalVM是开发人员编写和执行Java代码的工具。具体来说,GraalVM是由Oracle创建的Java虚拟机(JVM)和Java开发工具包(JDK)。它是一个高性能的运行时,可以提高应用程序的性能和效率。GraalVM的目标包括:编写一个更快、更易于维护的编译器,提高在JVM上运行的语言的性能,减少应用程序启动时间,将多语言支持集成到Java生态系统中,以及为此提供一组编程工具。GraalVM向JDK添加了一个优化编译器,它为各种语言提供性能优化,并为多语言应用程序提供互操作性。...

m0_50281408的博客 1万+

Amino.run项目配置(一) 样例运行 Ubuntu16.04LTS+Android studio+GraalVM-ce-1.0.0-rc8

Amino.run项目地址: https://github.com/amino-os/Amino.Run GraalVM下载地址 : 项目步骤: GraalVM安装与配置 Android studio安装与配置 使用Android studio运行Amino.run项目 1 GraalVM安装与配置 GraalVM安装很简单,下载tar.gz文件后解压,路径随意,这里假定为/home/gr...

aperture0的博客 493

新一代虚拟机GraalVM

在JDK10以前,能进行性能优化的即时编译器只有C2,但C2编译器的代码据说已经变得非常庞大且臃肿,同时伴随着云原生时代的到来,Java这种需要借助JDK才能运行的语言就显得格外臃肿,于是就有了Graal编译器的诞生,Graal编译器提供了非常强悍的能力,所以通常把Graal编译器与HotSpot合称为新一代的虚拟机——GraalVM。 GraalVM是一个高性能JDK发行版,旨在加速用Java和其他语言编写的应用程序的执行,并支持JavaScript、Ruby、Python和许多其他流行语言。 从上面的

sermonlizhi的博客 1973

nodejvm:通过从JavaKotlin访问NodeJS模块来启动GraalVM

节点JVM 该工具以允许您访问正版NodeJS实例的方式启动GraalVM。 是OpenJDK的变体,具有快速,现代JavaScript引擎,能够运行所有NodeJS模块。 GraalVM为您提供了可以访问Java类的NodeJS版本,但是如果您想采用其他方式,该怎么办-Java代码访问NodeJS模块呢? NodeJVM是一个精简包装脚本和JAR,可通过对NodeJS的完全访问权限来设置JVM。 它提供了一个简单的API,以线程安全的方式调用和退出Node事件循环线程。 它还提供了Kotlin API,该API提供了许多便利。 注意: NodeJVM不是新的JVM 。 这只是启动GraalVM的一种方法,GraalVM是由Oracle生产的JVM,它在OpenJDK之上具有一组补丁。 为什么要使用Java中的NPM模块? 可以访问独特JavaScript模块,如示例中所示的DAT

码洞技术文章大全

全栈虚拟机GraalVM初体验基于Netty自己动手编写RPC框架自己动手实现一个极简Web框架水塘抽样与阶层固化深度解析某头条的一道面试题基于Netty实现Redis协...

codehole_的博客 284

LSF0108 level shift设计使用及debug流程

目录 初版设计 测试出现的问题1 解决问题(尝试1) 测试出现的问题2 解决问题2-1 解决问题2-2 单Port测试结果 所有Port均连接测试结果 初版设计 此电路的应用场景在于将LCD屏幕连接到FPGA上,进而通过FPGA中设计的硬件电路来驱动LCD屏幕,验证数字硬件电路设计的正确性。因此需要一个转接板位于FPGA和LCD屏幕之间,将二者连接起来。 转接板的硬件电路设计主要存在以下需求: 实现3.3V和1.8V之间的同时双向逻辑转换(LCD屏幕电平为3.3V,FPGA电平为1.

moshanghongfeng的博客 7562

GraalVM 虚拟机-概述

Graal 编译器以及由此诞生的GraalVM,虽然目前还处在实验阶段,但是也是 Java 程序员们必须要了解的,因为他未来极有可能替代 HotSpot,成为 Java生态的下一代技术基础。

学海无涯 1831

quartusII简易CPU设计

优点可以实现八种运算,数据的存取及运算都能很好的实现,上板也很成功。缺点首先由于自己知识储备的缺乏,只能实现较为简单的8种运算,也是最简单的直接寻址。其次为了方便操作,没有从外部输入数据,都是直接使用存储在存储器中的数据。后续发展后续会在此简易CPU的基础上增加一些功能对CPU进行完善,如算术运算可以考虑是补码运算,输入、输出采用存储缓冲等等,直至完整的全功能的处理器。收获通过这次实践,更熟悉Quartus软件的操作。能过更加清楚每个器件的操作,比如计数器,运算器,译码器等的实现功能。

Kong08242022的博客 3484

华三(H3C)网络设备配置命令大全与学习指南

本文全面介绍 H3C 网络设备的配置命令,涵盖路由器、交换机、ACL、NAT、VTY、SSH、本地用户、日志、STP、防火墙、QoS 等模块,适合网络工程初学者与运维人员参考。

DreamCollector的博客 6570

GraalVM !拥抱云原生的 JVM

我计划针对GraalVMGraalVM!拥抱云原生的 JVM在JVM跑JavaScript脚本 | FaaS架构简单实现GraalVM 是一款基于 Java 虚拟机 (JVM) 的新型全栈虚拟机,由 Oracle 公司开发和维护。GraalVM 除了支持 Java 语言之外,还支持多种编程语言,如 JavaScript、Python、Ruby、R 等。高性能:GraalVM 基于 JIT (Just-in-time) 编译技术,在运行时动态生成本地代码,可以显著提高程序的性能。

集成显卡的开源主页 https://github.com/0604hx 906

SAP-PP 返工订单成本归集优化:从物料结算到成本中心的配置与增强实践

本文深入探讨SAP-PP模块中返工订单成本归集的优化方案,重点解析从物料结算到成本中心的配置与增强实践。通过结算参数文件配置、分配结构调整及增强开发实战,解决返工费用误计入物料成本的问题,确保财务核算精准性。文章还提供测试验证方案与常见报错处理技巧,助力企业实现成本数据清晰流向分析。

weixin_29260291的博客 366

GraalVM学习系列一:GraalVM介绍及安装方法,有了这个教程,可避免很多坑,本人亲自操作+淌雷后的经验

什么是GraalVM呢? 这个东西好啊,这个东西是一个超级虚拟机,可虚可实,怎么说呢,它可以运行脚本代码,可以运行跨平台代码,最牛B的是,它TM还能把这些代码编译成机器码,你说上哪说理去,执行效率CUA的一下就上去了,速度可媲美C++,就是这么不讲武德。 它可以运行什么代码呢? 有:Java, Python, Ruby, JavaScript & Node.js, R, LLVM 这玩意儿都谁在用呢? 首先说的是以“福报”著称的阿里巴巴,用这玩意儿干啥呢?用他们自己开发的SOFA Boot

Jeffong的博客 1万+

第一次面试经历:集创北方数字IC前端面试(崩)总结

时间:2020年8月11日上午10点 公司:集创北方,做LED、LCD、OLED、AMOLED等显示器芯片的公司,应该主要是做显示驱动、图像处理、电源管理等这一块。 岗位:数字IC前端设计 城市:北京 形式:线上面试。感觉我俩是两个社畜,他说摄像头开不开都可以,我说那语音OK吗他说OK,于是直接语音问答。 项目经历:基于FPGA的车牌识别 & 先导存储器集成工艺开发(课题组) & 基于FPGA的贪吃蛇小游戏 反正是凉凉的,这时候准备还不足,前面都在复习项目没怎么刷过题。 过程如下: 自我介绍

coin的博客 6681

172、摄像头振动与异响分析:VCM 共振、OIS 机械噪声的用户体验改善

摘要: 本文深入探讨了手机摄像头模组中VCM(音圈马达)与OIS(光学防抖)系统产生的振动异响问题及其解决方案。通过实际案例,分析了VCM弹簧片共振、OIS悬丝机械噪声以及系统级共振的成因,提出了硬件改进(如弹簧片厚度调整、阻尼材料应用)、驱动优化(PWM频率微调、软启动配置)和算法避让等综合解决策略。特别强调了量产阶段隐蔽性问题的排查技巧,包括扫频测试、机械阻尼处理和用户体验优化方法(如频率掩蔽)。作者建议工程师避免过度依赖仿真数据,重视实物测试,并与声学团队协作,以解决这类"玄学"问题,提升用户感知体验

sundong_81的博客 131

强大的GraalVM的虚拟机

一、前言 随着的Java的更新迭代,目前java的最新版本在Java16并且Java17马上发布,而且有望使用Java17这个长期支持的版本替换目前的Java8.不过最近浏览Oracle官网的时候发现了一个的Java虚拟机也是Oracle实验室觉得自己作为一个Java的开发工程师么为啥才知道。 二、GraalVM虚拟机 先看下官方网站的介绍: GraalVM is a high-performance runtime that provides significant improvements in app

失忆๑的博客 856

MicroPython学习:在STM32上进行移植

本文将介绍如何在STM32上移植MicroPython,并提供相应的源代码。通过以上步骤,你已经成功地将MicroPython移植到STM32上,并可以使用MicroPython语言编写和运行代码。你可以进一步探索MicroPython的功能和API,以利用STM32的各种外设和功能。使用STM32CubeProgrammer或其他适当的烧录工具,将编译生成的MicroPython固件烧录到STM32微控制器中。打开该文件,并根据你的STM32微控制器类型进行必要的配置更改。模块来控制STM32的LED。

JeeVue的博客 1237

原创 | 你知道什么是Graal VM吗?全栈虚拟机?猛!

世界上最好的语言是java,不服来战!???? java说,总有人想害朕 听说啊,在程序员中一直有这样的一个鄙视链:C 语言工程师鄙视 C++ 工程师,C++ 工程师鄙视 Java 和 C# 工程师,Java 工程师和 C# 工程师则互相鄙视,所有的工程师都鄙视PHP工程师。 哈哈,PHP的各位是不是尴了个大尬了????,没事,反正“PHP是世界上最好的语言” 我们先来看看这个: 嗯嗯,Java还是第一...

庆哥Java的优快云技术博客 1万+

基于Python实现人脸识别相似度对比

随着人工智能技术的不断进步,人脸识别成为了一种广泛应用的技术。人脸相似度对比是其中的一个重要应用场景,可以用于人脸搜索、身份验证等方面。本文将介绍如何使用Python实现人脸相似度对比。

商务合作 / 项目定制 / 学习交流。个人vx:lovely_wml 9810

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

java:跨语言通用虚拟机GraalVM

GraalVM 简介 GraalVM 是一个跨语言的通用虚拟机,支持Java、Scala、Groovy、Kotlin 等基于 JVM 的语言,以及 C、C++ 等基于 LLVM 的语言,还支持其他像 JavaScript、Ruby、Python 和 R 语言等。另外,GraalVM可以通过前端的LLVM执行JVM上面的原生代码。GraalVM 1.0版本是基于JDK8的。 GraalVM...

ice-wee的专栏 2371

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

全新的 GraalVM 跨语言虚拟机 ,Make Java Great Again!

Q:什么是 GraalVM?A:GraalVM 是新一代的高性能跨语言虚拟机,它为多种语言(包括 Java、python、JavaScript 和 Ruby)提供了高性能的执行环境。大家都...

实验楼 1016

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

oracle虚拟机字符集,Oracle 全栈虚拟机 GraalVM

GraalVM 简介GraalVM 是一个跨语言的通用虚拟机,不仅支持了 Java、Scala、Groovy、Kotlin 等基于 JVM 的语言,以及 C、C++ 等基于 LLVM 的语言,还支持其他像 JavaScript、Ruby、Python 和 R 语言等。GraalVM是一个共享运行时间的生态系统,无论是那些依赖于JVM的语言(Java、Scala、Groovy、Kotlin)还是说其...

weixin_39731271的博客 121
上一篇: 欢迎加入码洞技术交流群
下一篇: 大厨小鲜——自己动手实现一个极简Web框架
码洞
博客等级 码龄10年 41粉丝 137原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值