【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

GraalVM 21 发布,引入使用 Java 开发的虚拟机

  • 2021-02-08
  • 本文字数:1562 字

    阅读完需:约 5 分钟

GraalVM 21发布,引入使用Java开发的虚拟机

GraalVM21.0 主版本发布了,包含了一个新组件Java on Truffle,该组件提供了一个用 Java 开发的 Java 虚拟机(JVM)。GraalVM 本身是一个多语言虚拟机,提供了一个共享的运行时来执行用 Java、Python 和 JavaScript 等多种语言开发的应用程序。


在这个版本发布之前,在想在 GraalVM 上运行 Java 应用程序,可以使用带有 GraalVM 即时编译器(JIT)的 Java HotSpot VM 或者使用 GraalVM 原生镜像将代码编译成原生可执行文件。新版本的 Java on Truffle(一个基于Truffle框架、使用 Java 开发的 JVM)为运行 Java 应用程序提供了额外的选项。


Java on Truffle(代号 Espresso)可以通过 GraalVM 更新程序 gu 来安装。gu 是一个包管理器,用于下载和安装 GraalVM 核心发行版中不包含的包。


gu install espresso
复制代码


要通过 Java on Truffle 来运行 Java 应用程序,需要向 Java 命令传递-truffle 选项。


java -truffle -jar awesomeApp.jar
复制代码


Java on Truffle 是一种小型 JVM,提供了 JVM 的所有核心组件,比如字节码解释器、Java 本地接口(JNI)和 Java 调试线协议(JDWP)。它实现了 Java 运行时环境库(libjvm.so) API,重用了所有必需的 GraalVM JAR 包和原生库。就像传统的 JVM 一样,Java on Truffle 也支持运行其他基于 JVM 的语言,比如 Kotlin。



图片来源:GraalVM博客


因为它是用 Java 实现的,并且能够运行 Java,所以 Java on Truffle 本质上是自托管的 Java 或 Java on Java。这为研究和创新 JVM 提供了有趣的机会,因为 Java 开发人员可以阅读和理解 JVM 源代码,并对其加以改进。


下面是 Java on Truffle 提供的一些值得注意的特性和好处:


  • 在调试会话期间,利用增强的 HotSwap 功能在运行时修改方法、Lambda 和类的访问修饰符。

  • 能够运行不同于主机 JVM 的 Java 字节码版本。例如,可以通过Polyglot API在 Java 11 应用程序中调用 Java 8 的库。

  • 将宿主 JVM 和在 Truffle 上运行的 Java 应用程序隔离,运行不是很可信的访客代码。在这里,“宿主”和“访客”用来区分执行 Java 的不同的层。Java on Truffle 是访客层。

  • Java 应用程序可以与 JavaScript 和 Python 等非 JVM 语言直接互操作,并在相同的内存空间中来回传递数据。

  • 可以利用 Truffle 框架提供的标准工具。例如,可以使用 CPU 采样器分析工具来查看 Java 应用程序的哪个部分占用更多的 CPU 时间。

  • 构建预先编译(AOT)的 Java 原生镜像,动态加载和运行 Java 代码,使用 Espresso 的 JIT 编译器。例如,CI/CD 应用程序(如 Jenkins)可以被构建成原生镜像,同时又可以动态加载任意插件。



图片来源:GraalVM博客


GraalVM 提供了一组演示应用程序来展示这些特性和好处。


需要注意的是,Java on Truffle 是一个实验性组件,还不能用于生产环境中。Java on Truffle 当前版本的峰值性能比常规 JVM 慢了好几倍,但在后续版本中将得到改进。下面是一些值得注意的 Java on Truffle 限制,这些限制可能会在 GraalVM 的未来版本中得到解决:


  • 没有实现 JVM 工具接口(JVMTI)。不支持对应的“-agentlib”和“-agentpath”虚拟机选项。

  • 没有实现 java.lang.instrument 接口。不支持对应的“-javaagent”虚拟机选项。

  • 实现了部分 Java 管理扩展(JMX),有些方法可能只返回部分数据。


除了 Java on Truffle 之外,新版本还增强了其他功能。例如,现在允许在原生镜像二进制文件中使用 Java 序列化。在构建原生镜像之前,可以使用 javaagent 自动生成序列化配置。


新版本的 GraalVM 还为 Ruby、Python 和 LLVM 发行版提供了一些兼容性和运行时改进。GraalVM 的 WebAssembly 语言实现(GraalWasm)也得到了优化,提升了预热时间和 WebAssembly 的整体解释峰值性能。


GraalVM 社区版的 Java 版本更新了,基于 OpenJDK 1.8.0_282 和 OpenJDK 11.0.10。GraalVM 的 Node.js 版已经更新到 12.20.1。


在工具方面,GraalVM 21.0 附带了一个改进的 gu 工具,可以更简单地进行版本更新。Visual Studio Code 的GraalVM扩展包也已经发布,帮助开发和调试基于 GraalVM 的应用程序。


原文链接


GraalVM 21.0 Introduces a JVM Written in Java

2021-02-08 11:274539

评论 1 条评论

发布
用户头像
It is necessary to specify -XX:+IgnoreUnrecognizedVMOptions because Intellij automatically adds a -javaagent argument which is not supported yet.
2021-02-22 11:49
回复
没有更多了
发现更多内容

java培训学习中怎么来提升开发水平

小谷哥

看知识图谱如何解锁隐藏的营销利器

Neo4j 图无处不在

算法 neo4j 图数据库 知识图谱 图数据

SAP 异常现象之同一个IDoc可以被POST两次触发2张不同的物料凭证

SAP虾客

SAP IDoc BD87

参加大数据培训学习还来得及吗

小谷哥

K3S +Helm+NFS最小化测试安装部署只需十分钟

京东科技开发者

Docker k8s 软件测试 k3s 应用程序

我代码就加了一行log日志,结果引发了P1的线上事故

小小怪下士

Java 程序员 log 代码

web前端和java培训学编程哪个更好

小谷哥

磐久网络|揭秘阿里云HAIL数据中心网络

云布道师

阿里云 数据中心 基础设施建设

效能工具如何在企业规模化落地?|线上沙龙回顾

万事ONES

一个小而美的项目如何进行跨端选型

Onegun

移动端 跨端开发

又一创新!阿里云 Serverless 调度论文被云计算顶会 ACM SoCC 收录

Serverless Devs

为什么mysql不推荐使用雪花ID作为主键

京东科技开发者

MySQL 数据 雪花id 主键 自增

面试合集:数据库+数据结构+JVM+网络+JAVA+分布式+操作系统

钟奕礼

Java 程序员 java面试 java编程

云小课|云小课教您如何选择Redis实例类型

华为云开发者联盟

云计算 后端 华为云

MobPush 推送查询API

MobTech袤博科技

ansible2.4安装和体验

程序员欣宸

DevOps ansible 11月月更

前端培训程序员不好招吗,应该怎么学习

小谷哥

New Features | NFTScan 推出 BlueChip、Watch List、Activity Overview

NFT Research

区块链 NFT 数据基础设施

“读懂人话”,阿里AI总分首次超越人类成绩

云布道师

人工智能 阿里云

教你用JavaScript实现计数器

小院里的霍大侠

JavaScript 编程开发 初学者 入门实战

DTSE Tech Talk 第13期:Serverless凭什么被誉为未来云计算范式?

华为云开发者联盟

云计算 后端 华为云

云安全系列4:解析云安全工具集

HummerCloud

云计算 云安全

AI技术实践|用腾讯云慧眼微信浮层H5解决黄牛抢票问题

牵着蜗牛去散步

人工智能 腾讯云 腾讯 腾讯云AI

我们又重写了一个关键服务

Zilliz

人工智能 Milvus 向量数据库

嵌入式系统概述及特点

timerring

嵌入式 11月月更

如何通过链路追踪进行定时任务诊断

阿里巴巴云原生

阿里云 云原生 SchedulerX

前端培训程序员学习就业还有前途吗?

小谷哥

Service Mesh 的下一站是 Sidecarless 吗?

SOFAStack

MOSN

3.面向复杂度的架构设计模式

程序员小张

「架构实战营」

TCL 基于 StarRocks 构建统一的数据分析平台

StarRocks

#数据库

供应链-数字化招投标/采购/供应商管理系统

金陵老街

数字化 Java‘’ Vue 3 spring-boot

GraalVM 21发布,引入使用Java开发的虚拟机_编程语言_Uday Tatiraju_InfoQ精选文章