Blog chevron_right 未分类

重新审视嵌入式 Java

自诞生之日起,Java 就承诺“一次编写,随处运行”。最初,Java 主要关注嵌入式设备,例如机顶盒和电视。但很快,它就成为了一种领先的编程语言,支持编写具备高吞吐量、能够处理海量事务的大规模业务应用程序。由于这些应用场景非常引人注目,并且在这个领域中有很多工作机会,所以我们往往会忘记,嵌入式 Java 仍然非常活跃!

Azul 的客户在嵌入式平台上将 Java 用于车载资讯娱乐和信息显示、家居自动化和生产环境边缘网关、医疗设备、家用电器等领域,不胜枚举。

嵌入式 Java

“嵌入式”的范围非常广泛。在手机、边缘设备、Raspberry Pi 开发板等设备上,从非常小的微控制器(ESP32、Arduino 等)到功能强大、主要由 ARM 驱动的系统级芯片 (SOC),嵌入式的涵盖范围非常广泛。Java 不适用于这个范围中最小型的设备,但它能为其他平台带来许多益处!它作为一种理想的解决方案,不仅能够提高开发人员的生产效率,还可以提供稳定的运行时环境,保障实际环境中的可靠使用。

嵌入式和物联网案例研究

一个重要但不为人所知的事实是,与其他编程语言相比,Java 的能效相对更高。在生态和能源成本日益关键的当今经济中,这也是一个重要事实。根据研究《编程语言的能效:能源、时间和内存之间的关系》,举例而言,Java 的能效最高可达 Python 的 38 倍!

借助基于 ARMv7 或更新版本的现代化强大系统,在大型云环境或高性能机器上使用的 Java 运行时也能够在最小的 Linux 系统上同样流畅地运行。如我们的下载页面所示,Azul 提供适用于各种平台的 OpenJDK 构建版本。如果您的系统不在下载列表中,请联系我们!我们将为您提供帮助,因为我们还为客户准备了未在免费下载页面上列出的其他构建版本。

Azul provides builds of OpenJDK for various platforms, and supports embedded Java.

嵌入式 Java 的应用场景

得益于 6 个月的发布周期,近年来,Java 在语言和运行时方面取得了许多发展,将 Java 开发提升到了更高的水平。它提供了流畅的开发体验,并且,其丰富的库生态系统使开发人员能够使用最少的代码构建复杂而强大的方法。由于运行时会管理内存的使用并处理线程,开发人员可以专注于业务逻辑,提高工作效率。Java 在需要处理大量数据、创建摘要、与其他服务交互的解决方案中表现出色。例如,边缘设备会从各种传感器收集数据,需要对这些数据进行转换,然后才能将其发送给后端系统,而 Java 正是开发此类边缘应用程序的最合理选择,类似的例子还有许多。而得益于 JavaFX(用于构建有吸引力的用户界面),带屏幕的嵌入式设备也有了巨大的发展机会。

“最大的汽车品牌依靠 Java 处理汽车中的屏幕和传感器数据,”Azul 顾问 Marc Maathuis 说,“但 Azul 运行时也适用于医疗设备、销售点 (POS) 系统、自动售票机、家居自动化边缘设备等等。例如,借助 Java,您就可以远程检查屋中的温度或者打开屋门!”

embedded Java quote - You can remotely check the temperature in your house or open the door, thanks to Java!

Azul 为嵌入式 Java 提供的优势

开源的 OpenJDK 项目为 Java 提供了语言定义和运行时,并不断推动二者取得发展。对于嵌入式平台,有多个发行版可供选择,或者,您也可以从 OpenJDK 源代码开始创建自己的构建版本。但是,Azul OpenJDK 构建版本提供了许多附加价值,帮助您充分利用嵌入式 Java。Azul 提供世界上最值得信赖的开源 Java 平台,由世界上最专业的 Java 工程团队交付!一些关键优势:

  • 提供长期支持,甚至涵盖旧的 Java 版本:Azul 为其他提供商不再维护的许多 Java 版本提供长期和持续的支持,如 Java 6、7 和 8。
  • 安全性:Azul 遵循三个月的发布周期,每次发布的构建版本都会针对常见漏洞和暴露 (CVE) 提供最新的修复,确保您在最安全的平台上运行应用程序。
  • 定制构建版本:Azul 可提供完全符合您质量和性能期望的定制构建版本,例如,适配预定义存储大小和内存大小的构建版本。
  • 支持任何类型的处理器和内核:我们甚至可以为尚未创建过其他 Java 构建版本的平台或自定义内核创建构建版本。
  • 法律保护:除此以外,Azul 构建版本还可以保护您免受法律问题的影响(保证您的 Java 应用程序不受开源许可证的污染)。
  • 更快的启动:得益于 Azul 开发的技术,我们可以提供解决方案,最大限度地为您缩短应用程序启动时间(CRaM 和 CRaC)。

许多公司基于 Raspberry Pi 等现成设备构建新产品的原型,然后将软件移植到自己的定制硬件上。Maathuis 说,Azul 可以帮助您构建完全适合您产品的 Java 运行时,并提供您的应用程序所需的库。

embedded Java quote - Azul can help by building a Java runtime that perfectly fits your product and provides the libraries needed for your application.

保护您的代码免受许可证污染的影响

OpenJDK 项目希望保护 Java 生态系统的用户免受“污染”的影响。由于采用 GPL + 类路径例外的许可模式,您在使用由数千名开发人员贡献的众多内置库或代码片段时,将能够避免受到侵权问题的影响。许多用于构建 OpenJDK 的源文件(未包含类路径例外)都受 GPLv2 许可证的约束。从 Java 应用程序中调用此类代码可能会导致您的 Java 应用程序代码受到 GPLv2 许可证的污染。Azul 将保证 Java 运行时的客户构建版本完全遵守 GPL + 类路径例外许可模式。这样一来,您在将应用程序分发给最终用户后,不需要公布应用程序的源代码。

软件许可已成为所有语言的一大挑战。Azul 产品管理副总裁 Pavel Petroshenko 指出,开源社区推动软件行业取得了巨大的发展,但这伴随着一些附加条件。在 Azul,我们完全专注于 Java,了解并理解它的每一部分。我们可以帮助任何在开发、运行时环境或法律方面遇到问题或挑战的公司。

embedded Java quote - The open-source community has brought big evolutions in the software industry, but it comes with some "strings attached."

使用 Azul 运行时加快启动速度

Azul 有多种解决方案可最大限度地缩短应用程序的启动时间。在 OpenJDK 的 Zulu 构建版本中,提供了 CRaM(Main 方法处的检查点恢复)和 CRaC(检查点处的协调恢复)。这些项目基于 Azul 客户的需求,在 Azul 内部诞生。他们希望寻找一种能够非常快速地启动 Java 应用程序的解决方案。例如,在汽车中,您会希望在启动汽车后几秒钟内就能使用后视摄像头。这正是 CRaM 和 CRaC 所能实现的。这两种解决方案能够将已加载的 JVM 和 Java 类的状态存储在 Main (CRaM) 中,或稍后将已加载的应用程序类包含在客户定义的检查点 (CRaC) 中,从而加快应用程序的启动速度。

OpenJDK Zulu 构建版本中的 CRaMMain 方法处的检查点恢复)

  • 专为嵌入式应用场景开发
  • 在 Main 方法处创建带有类、分析器数据和堆部分转储的检查点
  • 在内存总线较慢的系统上提供最高收益
  • 启动时间最多缩短 20%
  • 不需要修改任何代码
  • 仅提供给 Azul Platform Core 客户

OpenJDK Zulu 构建版本中的 CRaC(检查点处的协调恢复)

  • 适用于所有 64 位 Linux/x64 和 Linux/Arm64 平台
  • 在您做出决定的时刻(例如,当应用程序完全预热时)创建完整应用程序和内存的检查点
  • 允许应用程序从创建的检查点重新启动
  • 可能需要更改代码
  • 潜在的改进是指数级的。我们已经看到了从 5 秒缩短到 50 毫秒(= 0.05 秒)的改进!
  • 它正处于开发阶段,包含在 OpenJDK 项目中:https://openjdk.org/projects/crac/
  • 了解更多:https://docs.azul.com/core/crac/crac-introduction

结语

Azul 致力于通过 OpenJDK 的 Zulu 和 Zing 构建版本帮助您充分利用每个 Java 平台。Java 环境为开发人员提供了最高的生产效率,这要归功于其众多出色的工具、发展和社区。如果您对任何平台上的 Java 有任何疑问,请联系我们,因为我们相信,我们可以为您的各种应用类型提供最佳的 Java 运行时环境。