在浏览器中运行Java应用的JVM替代


CheerpJ是 Leaning Technologies 的解决方案,用于在浏览器中运行大规模、未修改的 Java 应用程序和小程序。执行完全在客户端进行,除了标准 HTTP 服务器之外不需要任何服务器端组件。

CheerpJ 的成功源于能够以最小的努力高效地运行真实世界的 Java 应用程序,这对于延长遗留客户端 Java 应用程序的生命周期非常有用。这是通过一些功能实现的:

  • 不需要源代码: CheerpJ 根本不需要访问源代码,并且在 .class 和 .jar 文件中的 Java 字节码级别运行。第三方库、依赖项和混淆代码不会造成问题。
  • 支持高级 Java 功能:任何现实世界的 Java 应用程序和 OpenJDK 运行时本身,都会使用反射、多线程和运行时生成的类(用于实现 lambdas/invokedynamic 和代理)。CheerpJ 完全支持所有这些,不需要对应用程序进行调整。
  • OpenJDK 兼容性: CheerpJ 基于未修改的 OpenJDK 环境,与本机 JVM 相比,保证在浏览器上具有相同的行为。它包括许多仿真层以确保文件系统、网络、打印、剪贴板和许多其他子系统无缝工作。

CheerpJ 3.0 架构:WebAssembly 中的完整 JVM 替代品
新的 CheerpJ 架构的主要特点是:

  • 再见 AOT,你好 JIT 编译: CheerpJ 3.0 具有完全透明的多层执行模型,它从一个用于很少使用的代码的快速解释器开始,并结合一个用于频繁使用的代码的 JIT 编译器。有了这个新模型,就不会为未使用的类执行或生成任何代码,从而提高了启动性能。因为没有AOT编译器,也没有.jar.js文件,现在集成部署CheerpJ 3.0就是在已有的HTML页面上加几行。
  • 完整的类加载器支持:由于新的 JIT 方法模仿了 JVM 的正常运行方式,我们现在可以完全控制适当的类加载器以进行类解析,包括应用程序提供的类加载器。这也完全消除了由重复类引起的不兼容性。
  • 一种新的可扩展 JNI 架构:我们现在将 100% 的 OpenJDK 本机代码编译为 WebAssembly,为支持现代版本的 Java 和可能的特定点版本(如果用户需要)提供了可行的途径。这也意味着 CheerpJ 现在使用完全未修改的 OpenJDK 版本,进一步扩展了其兼容性级别。

由于这些架构上的进步,CheerpJ 3.0 可以被认为是 JVM 的完全基于 WebAssembly 的替代品,具有完整的 OpenJDK 运行时。