javascript - 为什么 JVM 不能代替 WebAssembly?

标签 javascript jvm webassembly

据我所知,JavaScript 不能提前编译,因为它是动态的。所以解释和即时编译发生在运行时,这会影响 JavaScript 的性能。所以 WebAssembly 应运而生。语言可以提前编译成中间格式 (WASM)。这提供了良好的性能,因为运行时开销较少。

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

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

最佳答案

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

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

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

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

关于javascript - 为什么 JVM 不能代替 WebAssembly?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58131892/

相关文章:

javascript - 如何让 Jquery 在页面的特定区域展开一个 div?

java - 多进程 Java 程序在其运行的 JVM 下的实际机器上下文中是单个进程吗?

go - go channel 和 goroutines 如何转换为 webassembly?

c++ - 禁用/重命名从主机环境 "env"导入

webassembly - 我的代码在 WebAssembly 中的私密性如何?

javascript - 改变增量减量框

javascript - 运行总计 - 购物车 - HTML/Javascript

jvm - WebSphere 应用程序挂起

javascript - 在 Windows : Unable to kill process(es) 上使用 Gulp 进行 E2E 测试编排

docker - 更改 Solr 的 JVM 参数