首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

CheerpJ 3:基于HTML5和WebAssembly实现浏览器无缝运行Java应用

当今随着HTML5和WebAssembly的崛起,在浏览器端实现富客户端的各种功能成了一种可能,用BS代替传统的CS将会变得非常容易和高效,今天我们就介绍一种在浏览器中实现高效运行原生Java的技术架构CheerpJ。

CheerpJ可实现在浏览器中无缝运行大量原生Java应用程序和小程序。运行完全在客户端进行,除了标准 HTTP 服务器之外不需要任何服务器端组件。我们今天就深入学习一下有关CheerpJ及其新一代版本CheerpJ 3的功能展望。

概述

CheerpJ是Leaning Technologies提出的一种技术方案,CheerpJ实现了以最小的努力高效地运行真实世界的Java应用程序,其主要包括如下功能:

无需源代码: CheerpJ不需要访问源代码,并且在.class 和.jar 文件中的 Java字节码级别运行。对第三方库、依赖项和代码混淆都不会有影响。

实现Java高级功能: 任何Java生产应用程序和OpenJDK 运行时本身,都支持使用反射、多线程和运行时生成的类,比如实现lambdas/invokedynamic和代理等。

完全容性OpenJDK:CheerpJ基于未修改的OpenJDK环境,与本机JVM相比,保证在浏览器上具有相同的行为。它包括许多仿真层以确保文件系统、网络、打印、剪贴板和许多其他子系统无缝工作。

架构升级

CheerpJ 2已经取得非常好的效果,但是存在一些问题:

执行模型:为了实现其性能,CheerpJ包括一个AOT编译器,该编译器为原始应用程序的每个.jar文件生成一个优化的.jar.js。这些文件由CheerpJ在运行时连同对应的.jar一起加载,并用于加速执行。事实证明,该模型难以理解、部署和集成。在CI设置中添 CheerpJ需要作为后处理步骤,很难在他们受控环境中运行实际的AOT编译器二进制文件。

对ClassLoaders的有限支持:将Jav 类名解析为字节码可以在运行时通过ClassLoaders控制。AOT 编译模型并不真正兼容这种级别的灵活性。AOT编译模型在处理多个jar包中重复的类时也很脆弱,对于日志库(log4j、slf4j)来说很常见。

启动时间和下载大小:Java应用程序在添加依赖项方面往往非常自由,有时会在运行时仅使用几个类时发送整个.jar。在当前的CheerpJ模型中,这会导致许多jar和jar.js文件在运行时被下载、解析和执行,这会减慢应用程序的启动速度。

运行时支持仅限于Java 8:在CheerpJ中添加对Java 9 和更高版本运行时版本的支持的主要障碍是 Java“本机”方法的实现(通过 JNI),这将需要为每个附加版本进行相当大的重复工作/颠覆运行时。

为了整体方法来解决所有这些问题,通过从头开始重新设计CheerpJ架构,同时利用从基于浏览器的x86虚拟机CheerpX中吸取的经验教训。

新的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 运行时。

在线测试

CheerpJ 3.0 目前仍在开发中,但它已经足够稳定,目前可以通过JavaFiddle:一个完全客户端的环境,可以在浏览器中编译、运行和共享Java代码。在线演示利用java编译器本身是用Java编写,因此也可以在CheerpJ中运行。

演示地址:javafiddle.leaningtech.c0m(请将0修改为o)

虫虫执行了一个Hello,Chongchong的 SwingSwing应用,结果如下。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20230512A01AIH00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券