当 Java 应用程序运行时,JVM 会经历加载、初始化和优化应用程序所用代码(包括库、框架和其他组件)的过程,以达到最佳性能水平。应用程序每次重新启动时,不会记录和记忆先前的运行时间及执行的工作,因此必须重启,不仅延长了启动和预热时间,导致时间的浪费,而且占用了宝贵的资源。
加速启动和预热是 Java 长期面临的一项挑战。OpenJDK 的 CRaC(检查点协调还原)项目是最具前景的解决方案之一。Micronaut、Quarkus 和 Spring 等框架已通过 CRaC 实现大幅改进。
开发人员现可亲自试用 CRaC。Azul 今日宣布正式发布适用于 Java 17 的 Azul Zulu 版本 OpenJDK,可在 x86 和 64 位配置中支持 CRaC。这些版本作为 Azul Platform Core 的一部分获得商业支持,也可不受限制地免费下载和使用。
“CRaC 在 Java 开发者社区引发巨大关注,为改善启动和预热时间提供了令人信服且节约资源的方法。”Micronaut 产品开发主管 Sergio del Amo 表示,“Azul 因发起该项目而闻名,不出所料,他们也将交付业界首个支持商业 CRaC 的生产就绪版本 OpenJDK。”
“CRaC 项目的检查点还原方法有望用于在 JVM 上立即启动 Spring 应用程序。我们与 Azul 的合作已取得良好的初步成果。”Spring Framework 项目的项目负责人兼联合创始人 Juergen Hoeller 透露。
OpenJDK CRaC 项目定义了公共 Java API,允许在检查点和还原操作期间协调应用程序资源。这一点很重要,因为可以在与创建检查点时不同的环境中还原应用程序,这些环境可能处在不同时区、使用不同的数据库连接字符串等等。
CRaC 允许正在运行的应用程序暂停、拍摄其状态快照并存储以供日后使用,甚至用于其他计算机。系统会将应用程序进程的完整上下文保存为映像,包括其状态和内存。
阅读 CRaC 使用指南
当应用程序稍后重新启动时,将跳过启动和预热,直接跳转至存储的配置文件。系统会快速重新加载整个应用程序及其状态,以便从创建检查点的位置继续运行。这种方法令 Java 应用程序的启动和预热时间缩短了几个数量级,仅为若干毫秒而非以秒或分钟计。
CRaC 允许 Java 应用程序利用检查点和还原机制,并根据需要与其进行协调。检查点和还原操作会将 JVM 和 Java 应用程序的状态保存至映像,随后可在未来某个时间点从该映像恢复 Java 应用程序。就好比在用完笔记本电脑后将其合起,之后再打开时,CRaC 会让笔记本电脑以与合起时相同的性能运行。
在 2022 年进行的测试中,支持 CRaC 的 OpenJDK 版本展示了令人印象十分深刻的结果:
平台 | 使用 CRaC 前 | 使用 CRaC 后 |
---|---|---|
Spring boot | 4 秒 | 38 毫秒 |
Micronaut | 1 秒 | 40 毫秒 |
Quarkus | 980 毫秒 | 53 毫秒 |
了解如何在您的 OpenJDK 版本中获取 CRaC
要将 CRaC 与适用于 Java 17 的 Azul Zulu 版本 OpenJDK 结合使用,请访问我们的下载页面并选择您的版本。您还可以通过我们的网站了解有关 Azul Platform Core 的更多信息。