Oracle 正式启动 “Leyden” 项目!在 Java 平台引入“静态映像”以解决运行缓慢等问题

简介: Oracle 正式启动 “Leyden” 项目!在 Java 平台引入“静态映像”以解决运行缓慢等问题

近日,Oracle Java 平台组首席架构师 Mark Reinhold 在社交媒体发文正式宣布启动 “Leyden”项目。据悉,该项目已获得批准,将通过在 Java 平台上引入“静态映像”来缓解启动和性能缓慢的问题,旨在加速 Java 业务的创建。

image.png

据了解,“Leyden”项目计划最早于 2020 年 5 月份左右提出,至今已经被讨论了 2 年多。

当时,Mark Reinhold 在一份 Java 邮件列表中发表了一篇关于他提议和领导的工作的帖子,他表示“这项工作被称为“Leyden”项目,将通过在 Java 平台和 Java 开发工具包(JDK)中引入“静态映像”的概念来解决这些痛点。

Leyden 项目引入“静态映像”

“Leyden”项目里引入的所谓的“静态映像”,是一款独立于应用程序的程序,它派生自一个运行该应用程序的应用程序,而非其他应用程序。

静态映像相对于它可以加载的类来说是一个“封闭的世界”:在运行时,不能从映像外部加载类,也不能动态创建类。封闭世界的约束严格限制了 Java 的自然动态性,特别是在运行时反射和加载类的功能方面,许多现有的 Java 框架和库都依赖这些功能。

以上两个约束不仅可以减少图像的大小及其启动时间,同时这些约束还“允许进行积极的提前编译(Ahead-of-time compilation),从而缩短图像达到峰值性能的时间,提前编译是将高级编程语言(如 C 或 C++)编译成本机机器代码,以便生成的二进制文件可以本机执行的行为。

Leyden 项目将加速 Java 的优化工作

据介绍,Leyden 是一个基于过去项目基础上新建立的项目,包括 GNU 编译器 for Java 和 GraalVM 的本机映像功能。GraalVM 是一种高性能运行时,针对各种语言(如 Java 和 JVM 语言、JavaScript、Ruby、Python 等)进行了性能优化,并针对多语言或多语言应用程序实现了互操作性。

image.png

由于 Leyden 项目的灵感来自 GraalVM,这两个项目有着共同的组成部分,它们可能会(也可能不会)进入主流 Java 规范。然而,由于目前缺乏进一步的信息,一些观察家认为这两个项目是交织在一起的。

早在 2020 年 Leyden 项目刚提出的时候,Longmeado Omdia 分析师 Bradley Shimmin 就评价称:“Leyden 项目似乎应该成为 GraalVM 项目的一部分,我相信作者希望这样做,因为它实现了 GraalVM 支持的相同目标,除了这里,他们提议创建一个针对单个应用程序的极其精简的运行时环境。”。

(Valhalla 项目是 Oracle 正在进行的一项工作,它引入了值类型,这是一种允许 Java 程序在运行时更高效地管理数据的机制。Oracle 表示,当 Valhalla 项目最终并入 JDK 时,整个性能格局将发生变化。)

此外,其他大型 Java 社区的成员也对该 Leyden 项目表示感兴趣且期待。早前,Red Hat 的产品管理高级总监 Rich Sharples 就提到,该项目“旨在从 OpenJDK 本身的 Graal/SubstrateVM 中提供我们所需的大部分内容”。

深入改进 Java 平台:正式开启第一步

当然,不是所有应用程序都能很好地适应“Leyden”项目“静态映像”的这这两个约束,也不是所有的开发人员都愿意接受这个约束。

但总而言之,Mark Reinhold 从一开始就没有采用封闭世界的约束,而是通过探索一系列约束,提出了一种渐进的方法,由此产生的优化可能比封闭世界的约束弱,但优化应该适用于更广泛的现有代码。

此次,Mark Reinhold 于 5 月 20 日在 OpenJDK 的一篇文章中正式宣布了 “Leyden” 项目的启动 —— “现在是采取第一步并开始该项目的时候了”,也是意在通过 “Leyden” 项目加速 Java 业务的创建。

Mark Reinhold 表示,“将沿着上述约束范围逐步工作,从小而简单的开始,以便能够深入了解 Java 平台规范所需的更改”。“在此过程中,也将努力保持 Java 的可读性、兼容性和通用性的核心价值”。

Mark Reinhold 还补充称,从长远来看, Leyden 项目开发人员可能会采用完全封闭世界的限制来生成完全静态的映像。同时,该项目还将在很大程度上支持现有的 JDK 组件,如 JVM 热点、C2 编译器、共享类和应用程序数据以及 JLink 代码工具。

参考链接:https://www.computerworld.es/...

相关文章
|
18天前
|
JavaScript 前端开发 Java
解决跨域问题大集合:vue-cli项目 和 java/springboot(6种方式) 两端解决(完美解决)
这篇文章详细介绍了如何在前端Vue项目和后端Spring Boot项目中通过多种方式解决跨域问题。
234 1
解决跨域问题大集合:vue-cli项目 和 java/springboot(6种方式) 两端解决(完美解决)
|
22天前
|
分布式计算 大数据 Java
大数据-86 Spark 集群 WordCount 用 Scala & Java 调用Spark 编译并打包上传运行 梦开始的地方
大数据-86 Spark 集群 WordCount 用 Scala & Java 调用Spark 编译并打包上传运行 梦开始的地方
15 1
大数据-86 Spark 集群 WordCount 用 Scala & Java 调用Spark 编译并打包上传运行 梦开始的地方
|
2天前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
12天前
|
IDE Java 编译器
Java:如何确定编译和运行时类路径是否一致
类路径(Classpath)是JVM用于查找类文件的路径列表,对编译和运行Java程序至关重要。编译时通过`javac -classpath`指定,运行时通过`java -classpath`指定。IDE如Eclipse和IntelliJ IDEA也提供界面管理类路径。确保编译和运行时类路径一致,特别是外部库和项目内部类的路径设置。
|
15天前
|
Java Apache Maven
Java/Spring项目的包开头为什么是com?
本文介绍了 Maven 项目的初始结构,并详细解释了 Java 包命名惯例中的域名反转规则。通过域名反转(如 `com.example`),可以确保包名的唯一性,避免命名冲突,提高代码的可读性和逻辑分层。文章还讨论了域名反转的好处,包括避免命名冲突、全球唯一性、提高代码可读性和逻辑分层。最后,作者提出了一个关于包名的问题,引发读者思考。
Java/Spring项目的包开头为什么是com?
|
18天前
|
运维 Java Maven
Dockerfile实践java项目
通过上述实践,我们可以看到,Dockerfile在Java项目中扮演着至关重要的角色,它不仅简化了部署流程,提高了环境一致性,还通过多阶段构建、环境变量配置、日志管理、健康检查等高级特性,进一步增强了应用的可维护性和可扩展性。掌握这些实践,将极大地提升开发和运维团队的工作效率。
25 1
|
19天前
|
算法 Java Linux
java制作海报五:java 后端整合 echarts 画出 折线图,项目放在linux上,echarts图上不显示中文,显示方框口口口
这篇文章介绍了如何在Java后端整合ECharts库来绘制折线图,并讨论了在Linux环境下ECharts图表中文显示问题。
34 1
|
19天前
|
运维 Java Maven
Dockerfile实践java项目
通过上述实践,我们可以看到,Dockerfile在Java项目中扮演着至关重要的角色,它不仅简化了部署流程,提高了环境一致性,还通过多阶段构建、环境变量配置、日志管理、健康检查等高级特性,进一步增强了应用的可维护性和可扩展性。掌握这些实践,将极大地提升开发和运维团队的工作效率。
14 1
|
11天前
|
存储 Oracle 关系型数据库
Oracle数据库的应用场景有哪些?
【10月更文挑战第15天】Oracle数据库的应用场景有哪些?
122 64
|
1天前
|
SQL Oracle 关系型数据库
Oracle数据库优化方法
【10月更文挑战第25天】Oracle数据库优化方法
14 7

推荐镜像

更多