据我所知,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/