这种方式同样使用 Wizer 来优化初始化性能,这样就可以缩短冷启动时间 。“我们会在调用函数之前,预先初始化所有 Java,所以Java引擎不需要进行初始化处理 。一切都已使用 Wizer 进行了预初始化 。”
这不是提前(Ahead Of Time,AOT)编译,但今年晚些时候或明年,omponentize-js 将使用 Bedford 建议的部分评估技术进行更高级的运行时优化,这样就可以实现AOT 。“因为你知道绑定了哪些函数,所以可以使用二村映射评估解释器,并获得这些函数的编译版本,作为SpiderMonkey本身评估解释器的一部分 。”
Compontentize-js 是字节码联盟的一个名叫jco项目的一部分,jco 是一个为 WebAssembly 打造的Java 组件工具,目前还是处于实验阶段的 Java 组件工具链,并非该 Java 运行时特定的工具 。Bedford 解释说,“我们的基本思路是,构建一个更通用的工具,无论将 WebAssembly 放在何处,都可以使用 Java 编写一小段代码 。”
Randall 指出,Jco 是一个“彻头彻尾的 Java 新体验”项目,这表明我们可以期待在 wasmtime 的下一个版本中看到更成熟的 Java 和 Rust 组件版本 。重要的是要注意,这些仍处于实验阶段,WebAssembly 组件模型尚未发布,Bedford 称 componentize-js 为研究,而非预发布软件:“我们的目标是为处于该领域最前沿的开发人员提供这些功能,目前只是迈出了第一步 。”
实验性的 lightjs 针对的也是 WebAssembly 组件模型,他们创建的 Wasm 接口类型绑定可以共享 Java 的类型和定义 。到目前为止,wit-bindgen 生成器(为希望编译为 WebAssembly 并与组件模式一起使用的程序开发人员提供语言绑定)仅支持编译语言,C/C++、Rust、Java 和 TinyGo,因此添加Java之类的解释型语言可能具有一定的挑战性 。
虽然 spin-js-sdk 可以专门为 Spin HTTP 触发器生成绑定,但 SlightJs 的目标是为开发人员提供Wasm 接口类型绑定 。最终,它将成为微软 SpiderLightning 项目的一部分,该项目将为开发人员提供使用 Wasm 接口类型构建云原生应用程序时所需的功能,为运行使用 SpiderLightning 的 Wasm 应用程序的轻量级命令行工具添加 Java 支持 。
目前,SlightJS 使用的是 QuickJs,因为QuickJs的性能更好,但随着 SpiderMonkey 的改进,将来可能会转变,Butcher 指出了 JIT 风格的 Java 运行时具备的性能优势 。QuickJs 本身在很大程度上取代了早期的可嵌入 Java 引擎 Duktape 。
Bedford 表示,“目前相关的活动呈爆炸式增长,该领域正在加速发展 。”
Java 与 Wasm 的共同提升
TC39 ECMA 工作组副主席 Daniel Ehrenberg 建议,你可以将以上这些方法想象成“Java 脚本在上层,而WebAssembly 在下层”,但还有一种方法是“Java 和 WebAssembly 并排放置,而底层是 Java 虚拟机 。”
后一种方法是 Bloomberg 和 Igalia 长期以来的努力方向,这种建议旨在实现 Java 与 WebAssembly 之间的高效交互,例如引用类型字符串可以降低WebAssembly 程序使用 Java 字符串的难度,而 WebAssembly GC 的垃圾收集可以简化内存管理 。
TC39 联合主席兼 Bloomberg 基础设施与工具团队负责人 Rob Palmer 解释说,字符串在两种语言之间更好地协同工作可以提高效率 。“目前二者还无法真正做到高效,因为在两个域之间复制字符串的开销超过了 WebAssembly 提供的速度提升 。”
WebAssembly GC 给 Java 带来的不仅是 Java 的弱引用和 finalization registry,还提供了 WebAssembly 线性内存与基于 Java 堆的内存之间的最小限度的互操作性,从而允许编译一些 Wasm 程序 。Ehrenberg 解释道,“WebAssembly 不仅具有线性内存,而且还可以分配几个不同的垃圾收集分配对象,这些对象指向彼此,具有完全自动的内存管理 。你只需要追踪引用,‘死掉’的东西都会自动消失 。”
在 WASI 中支持线程,通过并行化提高性能,并提供对现有库的访问,这些工作尚处于早期阶段(最初仅适用于 C,目前尚不清楚如何与组件模型协同工作),但这两个 WebAssembly 提案完成得非常好,希望很快就能在浏览器中推出,以帮助到一系列开发人员 。
“这在一定程度上能够方便我们将 Kotlin 之类的语言编译成 WebAssembly,而且效率高于自己动手分配内存,此外还能方便我们在 Java 和 WebAssembly 的并排架构中实现零拷贝的内存共享 。”
对于服务器端 Java,Ehrenberg 表示很欣慰看到两种方法之间互相协调的迹象,这两种方法最初似乎朝着不同的方向发展:WinterCG API 旨在方便在服务器端环境中使用 Web 功能,而 WASI 则旨在为 WebAssembly 提供更强大的 IO 功能 。
推荐阅读
- 「AI教父」万字采访实录:AI航行的方向藏着巨大的冰山
- 祛湿|独家揭秘:当今最流行的美容美妆秘籍让你更美丽
- 8款流行的金属风美甲 指甲款式图片2022最新款
- 谢娜|谢娜公开道歉把责任摘得干干净净,同天出行的文咏珊给谢娜张杰上了一课
- 流行|近几年流行的手串
- 银行|西北银行发行的纸币,收藏市场比较少见
- 徐峥|贪财好色、坑害同行的徐峥,是怎么混到人见人厌的?
- 当今最流行的局域网技术有哪些?
- 缓刑一般是怎么执行的,一个月要去司法所几次,去做什么?
- 什么是B2B营销?B2B营销该怎么做?8种验证可行的方式