看准在浏览器执行Java应用程序的需求,Leaning Technologies新推出CheerpJ 3.0,这是一个由HTML5和WebAssembly所开发的JVM替代解决方案,可在浏览器中执行Applet与Java应用程序。由CheerpJ 3.0架构升级带来的多项优势,不仅能让现有的Java应用程序都搬迁到浏览器执行,而且可能影响开发者对网页应用程序开发语言的选择。

CheerpJ解决方案的目的是要支持在浏览器中,执行大型且未经修改的Java应用程序和Applet,除了需要标准HTTP服务器之外,CheerpJ不需要任何服务器端组件,就可以让Java应用程序在浏览器执行。

CheerpJ的特点包括不需要访问源码,仅在.class和.jar文件层级运行,因此第三方函数库、相依关系和经过程序代码混淆工程的程序,都不会对CheerpJ执行Java造成问题。而且CheerpJ还支持高端Java功能,完全支持任何Java应用程序和OpenJDK Runtime本身会使用的反射、多线程等功能,因此开发者将程序放到CheerpJ上执行,并不需要进行任何修改。

因为CheerpJ以未经修改的OpenJDK为基础,因此即便在浏览器上运行,其行为也和原生JVM相同,其模拟层也都确保文件系统、网络、打印、剪贴板和其他子系统运行顺畅。

但是旧版的CheerpJ存在一些问题,由于原先CheerpJ的架构使用Ahead-of-Time(AOT)编译,这会造成系统部署和集成上的困难,而且AOT编译模型又与Java灵活性冲突,在处理复杂框架和重复类别的时候存在一些限制。

在原架构中,要在Java应用程序添加相依项目,可能需要在执行时下载大量文件,且还要经过解析和执行阶段,如此会大幅影响应用程序的启动速度。另外,原本架构在支持Java 9及以上版本存在困难,开发团队需要进行繁琐的工作,才能提供额外的版本和子版本支持。

CheerpJ 3.0的出现便是要解决这些问题,新版本是一个以WebAssembly为基础的Java虚拟机架构。在新版本中,CheerpJ不再使用AOT,而是转向使用JIT编译,CheerpJ 3.0采用多层执行模型,以快速解释器处理很少执行的程序代码,并且运用JIT编译器处理经常执行的程序代码,因此未使用的类别和程序代码可能不会被执行或是生成,如此便能提高应用启动性能。

由于没有AOT编译器或是.jar.js文件,所以将CheerpJ 3.0集成到现有的HTML页面,只需要几行程序代码就能完成。新的JIT编译方法模拟了JVM运行方式,因此消除了重复类别所造成不兼容的状况。开发团队将100%的OpenJDK原生程序代码,编译成为WebAssembly以支持最新的Java版本,该方法也可满足开发者需要支持特定Java版本的需求。

基于多项架构更新,CheerpJ 3.0现在可被视为一个完整的JVM替代解决方案。官方预计会在2023年夏季正式发布CheerpJ 3.0,不过现在开发者已经可以在客户端环境JavaFiddle先行尝鲜,编译、执行和共享Java程序代码。