【问题标题】:Why the JVM cannot be used in place of WebAssembly?为什么不能使用 JVM 代替 WebAssembly?
【发布时间】:2020-01-27 14:57:37
【问题描述】:

据我了解,由于 JavaScript 具有动态特性,因此无法提前编译。因此解释和即时编译发生在运行时,这会影响 JavaScript 性能。所以 WebAssembly 应运而生。语言可以提前编译成中间格式(WASM)。这提供了良好的性能,因为运行时开销更少。

我的问题是为什么不能使用 JVM 代替 WebAssembly VM。 Java 编译成中间格式(字节码)。这个字节码可以提供给浏览器,JVM可以执行。 JVM 还支持 JIT,这有助于实现接近原生的性能。

那么对新的 WebAssembly 有什么需求。为什么JVM不能集成到浏览器中,利用现有最流行的Java语言实现高性能。

【问题讨论】:

  • JVM当然可以集成到Web浏览器中,没有技术上的不可能性。虽然,在 JVM 中运行的字节码总是比本地机器编译的代码慢,但我认为主要原因可能是政治原因(不想在网络上放很多应该保持中立/免费的 Java/Oracle?)有趣的问题无论如何:)
  • 看来 WASM 的性能实际上并没有(原生)那么好,所以我倾向于真正考虑政治问题 :)
  • 时间到了,Java 也将编译为 WASM。
  • @jayarjo 除了商标相关的原因,我想我们不会被允许称之为Java:/
  • 网络应该是打开的。甲骨文是有史以来最不开放的科技公司。

标签: javascript jvm webassembly


【解决方案1】:

来自 WebAssembly 的 High-Level Goals 的引用:

该标准的最小可行产品 (MVP),功能与 asm.js 大致相同,主要针对 C/C++;

所以他们最初的目标是在网络浏览器中运行 C/C++ 程序,而不是运行 Java 代码。

【讨论】:

    【解决方案2】:

    JVM 不被认为是代替 WebAssembly 的合适运行时的原因有很多...

    • WebAssembly 在设计时考虑了 HTTP 交付和基于浏览器。因此,它支持流式编译 - 即您可以在下载时开始编译代码。
    • WebAssembly 旨在具有快速编译时间(导致网页加载快速),与 Java/JVM 语言相比,它具有非常简单的验证规则来支持这一点。
    • WebAssembly 的设计理念是“主机”环境,即浏览器。
    • WebAssembly 旨在安全且简单,最大限度地减少整体攻击面。
    • WebAssembly 旨在支持多种语言(C、C++、Rust 等),而 JVM 最初是为单一语言 Java 设计的。

    一般来说,WebAssembly 旨在支持网络上的多种语言。 JVM 旨在支持桌面上的 Java。从更一般的意义上说,这并不能使任何一个比另一个更好。

    最后,JVM 与浏览器(Java Applets)集成,但最终没有成功!

    【讨论】:

    • 嗯,在某种程度上,人们已经想到了这个问题,并且 a) 为 GraalVM 创建了一个功能请求以运行 WebAssembly 代码 b) 可能一些“简单”地在 WebAssembly 中实现了一个 JVM。
    • @StefanRother-Stübs 我猜你说的是 GraalWasm:medium.com/graalvm/…
    • 尽管如此,有几个编译器支持translate JVM bytecode to WebAssemblyvice-versa
    • “最后,JVM 与浏览器(Java Applet)集成,但最终还是没有成功!” Java 爱好者:JVM 是通过插件使用的,但如果你问我,这与“与浏览器集成”不同。事实上,它是一个独立的运行时,有自己的更新方法等,这是它垮台的原因之一。他们应该创建一个轻量级/安全的 VM,可以与浏览器集成,而不是在 CORBA 更改实现的同时作为安全修复程序时依赖 70 MB 的下载。我非常同意这篇文章的其余部分!
    • @MaartenBodewes 可以通过 WASM 和 SubstrateVM 完成吗?
    猜你喜欢
    • 2021-08-30
    • 2016-08-24
    • 2012-11-26
    • 2015-06-27
    • 1970-01-01
    • 1970-01-01
    • 2022-11-25
    • 2022-12-20
    • 1970-01-01
    相关资源
    最近更新 更多