
Learning Technologies 将在今年晚些时候发布 CheerpJ 3.0,它是 HTML5 和 WebAssembly 中 JVM(Java 虚拟机)的实现,包括 JIT(即时)编译器和完整的类加载器支持。主要目标是拥有现有 Java 应用程序的企业。另一个用例是用于教学,“JavaFiddle”应用程序允许用户完全在浏览器中键入和运行 Java 代码。“该演示利用了 java 编译器本身是用 Java 编写的这一事实,因此也可以在 CheerpJ 中运行,”该公司表示。新产品将取代现有的 CheerpJ,它也是 WebAssembly 中的 JVM 实现,但据该公司称,它存在只能通过新架构修复的缺点。有几个问题。一是它需要提前编译 Java。“将 CheerpJ 添加为 CI 设置中的后处理步骤的需要通常被认为是一种不受欢迎的负担,”该公司表示。另一个问题是它卡在了 Java 8 上。据该公司称,“CheerpJ 基于未经修改的 OpenJDK 环境,与本机 JVM 相比,保证在浏览器上具有相同的行为。它包括许多仿真层,以确保文件系统、网络、打印、剪贴板和许多其他子系统无缝工作。”
JavaFiddle,CheerpJ 3.0 的演示
我们发现在 JavaFiddle 环境中修改、编译和运行示例 Swing 应用程序(Java 的标准 GUI 框架)很容易,尽管即使是短短的几行编译和运行也很慢。还有其他方法可以在浏览器中运行 Java。TeaVM需要提前编译并从 Java 类文件输出 JavaScript 和 WebAssembly。JWebAssembly是 WebAssembly 编译器的 Java 字节码,但“不是具有 GC 和内存管理的完整 VM”。Google 的j2cl从 Java 转换为“Closure style JavaScript”,并被 Google 用于 Workspace,尽管 Google 的 J2CL 团队表示“J2CL 不是 Google 的官方产品,目前处于开发人员预览版的‘alpha’版本中。” J2CL在这方面很有趣,因为他的待办事项之一是“改进 WASM GC 规范、工具和 J2CL 实验性 Wasm 后端”。GC(垃圾收集)是在 WebAssembly 中实现 Java 和 C# 等语言的一个大问题。目前,每个实现都需要提供自己的 GC,这会增加文件大小,而且效率低于本机 GC。还有一个将Wasm添加为GraalVM目标的项目。GraalVM 是用于编译为本机代码的官方 Java 解决方案。GraalVM 团队也在等待 GC 得到解决,但根据对此问题的评论,“GC 提案在 2022 年取得了很多进展并进入了阶段 3。我们无法确定它何时会进入阶段 4但有可能在 2023 年实现。”在浏览器中运行 Java 对拥有遗留 Java 应用程序的企业具有吸引力,由于像这样的插件,这些应用程序现在可能成为浏览器应用程序。也就是说,虽然在浏览器中运行 Swing 是一个令人印象深刻的技巧,但从用户界面的角度来看,它远非理想。UI当然最好用web技术来实现;一旦开发团队开始执行该任务,他们可能还会问自己,在 Wasm 中运行 Java 及其复杂性和折衷方案是否真的是当今最好的方法。CheerpJ 产品不是开源的。它对“测试和技术评估”是免费的,但这家总部位于英国的公司表示,商业用途的许可证起价为每月 80 英镑。
作者:Tim Anderson
本文由“云原生数据库”小编翻译。