JavaFX 27 在 Raspberry Pi 5 上的 AOT 奇迹
JavaFX 27 Native Image on a Raspberry Pi 5

我们将 GUI 和 CLI 应用全面迁移至 GraalVM Native Image 的 AOT 编译模式,发现启动速度提升高达 90%。在 Raspberry Pi 5 上,AOT 编译的 JavaFX 27 应用启动仅需 0.5 秒,甚至快于高端 Ryzen 9 桌面机上的 JIT 版本。虽然 JavaFX 与 Native Image 的适配曾因复杂的元数据配置和底层“魔法”而声名狼藉,但通过对比 Gluon Substrate、BellSoft Liberica NIK 以及我们自研的 StaticFX 三种方案,我们揭示了如何克服这些障碍。StaticFX 作为 GraalVM Feature 运行,无需修改源码即可支持 Media、Web 等模块,让 JavaFX 在嵌入式设备上也能拥有极致的响应体验。
GUI 大多在解释模式下运行,用户需点击数千次才能达到 JIT 阈值,而采用 AOT 编译可将启动和首次访问时间减少高达 90%,从而带来显著更好的用户体验。
HN 评论区
12- exabrial
我觉得 JavaFX 目前最需要的就是和 DI 框架的集成!我启动了一个叫 DiFx 的项目,做的就是这件事:https://github.com/exabrial/DiFx
这让 JavaFX 中的状态和共享数据管理变得轻松许多,因为你可以把这些顾虑交给容器处理。CDI 还提供了强大的功能,包括可移植扩展、作用域管理,以及同步和异步事件框架。
问题是我手头没有“真实”的项目可以试用,所以开发进度就有点停滞不前了。
- geokon
感谢写下这篇总结!虽然它仍然预设了不少前置知识,但作为解决这类问题的切入点已经很好了。从外部视角看,JavaFX 在不同平台上的运作方式简直像黑魔法。我用 Clojure 和 cljfx 写过一款应用,可以用 jpackage 打包并在 Linux/Windows/macOS 上运行……配置起来相当简单。但一旦跳出这些标准平台,复杂度就会迅速飙升。试着让它跑在 Android 上或者做原生构建时,你突然就得精通多种构建系统和 JVM 内部机制。
- giancarlostoro
看来 JavaFX 并没有像 Oracle 当初把它从 JDK 中剥离时我们所有人以为的那样“死掉”,他们现在很乐意继续提供支持,但谁又愿意和 Oracle 同床共枕呢?
这看起来确实很酷。JavaFX 做对的一件事就是它对 CSS 的支持。