Project Leyden 早期访问版本开放下载:Java 程序启动速度提升 2 至 3 倍

作者 | A N M Bazlur Rahman 译者 | 明知山 策划 | 丁晓昀

OpenJDK 迎来一个重要的里程碑,宣布 Project Leyden 早期访问(EA)构建版本已开放下载。这一版本凝聚了一年多的精心开发,旨在提高 Java 应用程序的性能,特别是缩短启动时间。初步的测试结果令人振奋,一些流行的应用程序框架在启动速度上实现了 2 至 3 倍的提升。

Leyden EA 构建带来了一些创新特性,通过将工作负载从运行时转移到早期实验执行阶段,即所谓的训练执行,来优化 Java 应用程序。在训练执行期间,系统会根据应用程序的行为预计算各种信息,包括将字节码预先编译为本地代码。

统一缓存数据存储(Unified Cache Data Store,CDS)归档作为其他特性的基础,使得 CDS 能够存储类元数据、堆对象、分析数据和编译代码。用户可以通过使用 -XX:CacheDataStore 标志来访问,简化了 CDS 归档的创建和测试过程。

CDS 归档中已加载的类特性(通过 -XX:+PreloadSharedClasses 标志来启用)允许类在应用程序启动时立即预加载成已加载状态。这有助于实现各种时间转移优化,使启动过程更快。

CDS 归档中的方法分析特性将训练执行中的方法分析存储在 CDS 归档中,为即时编译器(JIT)在热身阶段更早开始编译提供了依据。这使得 Java 应用程序能够更快地达到峰值性能。这个特性可以通过 -XX:+RecordTraining 和 -XX:+ReplayTraining 标志来启用。

提前编译(AOT)解析常量池特性会在训练执行期间解析许多常量池条目,这一动作将显著提高启动速度,并使 AOT 编译器能够更好地生成代码。这个特性可以通过 -XX:+ArchiveFieldReferences、-XX:+ArchiveMethodReferences 和 -XX:+ArchiveInvokeDynamic 等标志来启用。

Java 方法的 AOT 编译特性会在训练执行期间识别被频繁调用的方法,并编译它们,将它们与 CDS 归档存储在一起。这样,应用程序在启动时就可以立即以本地代码的形式执行。这个特性可以通过 -XX:+StoreCachedCode, -XX:+LoadCachedCode, 和 -XX:CachedCodeFile 标志进行管理。

AOT 生成动态代理和反射数据特性通过提前生成动态代理和反射数据来缩短启动时间,流行的应用程序框架通常会使用这些数据。这个特性可以通过 -XX:+ArchiveDynamicProxies 和 -XX:+ArchiveReflectionData 标志来启用。

类加载器查找缓存特性通过缓存来加速应用程序框架中常见的重复类查找。这个特性可以通过 -XX:+ArchiveLoaderLookupCache 标志来启用。

要体验 Leyden 的新特性,开发者可以运行 Leyden EA 版本中的 java 程序,并开启 -XX:CacheDataStore 标志。

Leyden EA 构建版本显著提升了 Java 应用程序的优化水平,尤其是在启动时间方面。开发者们可以预期,诸如 AOT 编译、统一 CDS 归档以及存档方法分析等功能将带来显著的性能飞跃。社区的持续参与对于这些特性的完善至关重要,他们将确保这些功能能够成功融入未来的 Java 版本中。

社区的持续反馈对于进一步改进 Leyden EA 构建至关重要,开发者可以积极体验 Leyden EA 构建版本,并向 leyden-dev@openjdk.org 发送电子邮件分享使用体验。

对于希望探索 Leyden 特性并深入了解项目开发详情的开发者,可以参考发布说明 ,获取详细信息和使用 Leyden EA 构建的说明。

Java 开发人员可以通过持续关注设计笔记、演讲和官方代码库等资源,充分利用这些优化措施来提高他们应用程序的性能和效率。正如 InfoQ 先前报道的那样,Project Leyden 一直在应对各种挑战,包括提前编译的延迟问题,而这次发布旨在解决这些问题。

查看英文原文:

https://www.infoq.com/news/2024/07/project-leyden-ea-release/

声明:本文由 InfoQ 翻译,未经许可禁止转载。

今日好文推荐

剥离几百万行代码,复制核心算法去美国?TikTok 最新回应来了

软件工程的兴衰轮回:2 年巨变,裁员风暴下小团队逆袭,老技术反迎第二春?

“我的代码被微软和 OpenAI 抄了,维权后被他们耗了两年”

69 岁的 Java 之父退休了!近亿人因他受益

相关推荐

  • 金融数字化营销的“陷阱”与“出路” | 直播预告
  • 大型银行和中小银行眼中的“五篇大文章”有何不同?
  • 微软中国 CTO 韦青:亲身经历大模型落地的体会与思考
  • 干财务的学Python到底有没有用?
  • 实现一个直击用户灵魂的 Loading 效果(附源码)
  • 为消除幻觉,Amazon Bedrock开大招! 推出上下文基础和 RAG 连接器!
  • GPT-4o们其实都是眼盲!OpenAI奥特曼自曝自家模型:推理比人弱。研究证明:多模态能力还差得远,杨立昆上大分
  • CVPR 2024 冠军!视频版GPT-4o
  • 项目终于用上了 PowerJob,真香!
  • 深度学习时间序列异常检测方法
  • 为啥本科生都能发顶会,而博士一篇都没有?
  • 压箱底:10 个超强的 Web 资源汇总!
  • Node进程管理器PM2使用
  • 密歇根州立大学崔梓筠教授课题组2025春/秋博士招聘
  • 五年后的今天,训练GPT-2只需不到700刀、24小时,Karpathy又整新活
  • 美联储鲍威尔 | 货币政策众议院半年度听证 (全文+视频)
  • [开源]一个基于SpringBoot与SpringCloud构建的开源物联网云平台
  • 数百Kaggle GM的秘密宝库分享。
  • 德国宣布移除5G网络华为、中兴等组件
  • 面试官:要保证消息不丢失,又不重复,消息队列怎么选型?