为什么 JVM 不能代替 WebAssembly?
Why the JVM cannot be used in place of WebAssembly?
据我了解,Java脚本不能提前编译,因为它是动态的。因此解释和即时编译发生在 运行 时间,这会影响 Java 脚本性能。所以 WebAssembly 应运而生。语言可以提前编译成中间格式 (WASM)。这提供了良好的性能,因为 运行 时间开销较少。
我的问题是为什么不能使用 JVM 代替 WebAssembly VM。 Java 编译成中间格式(字节码)。可以将该字节码提供给浏览器,JVM 可以执行它。 JVM 还支持 JIT,这有助于实现接近本机的性能。
那么新的 WebAssembly 需要什么。为什么JVM不能集成到浏览器中,利用现有最流行的Java语言实现高性能。
来自 WebAssembly High-Level Goals 的引用:
a Minimum Viable Product (MVP) for the standard with roughly the same functionality as asm.js, primarily aimed at C/C++;
所以他们最初的目标是 运行 C/C++ 网络浏览器中的程序,而不是 运行 Java 代码。
JVM 不被认为是替代 WebAssembly 的合适运行时的原因有很多...
- WebAssembly 的设计考虑了通过 HTTP 和基于浏览器的交付。因此,它支持流式编译——即您可以在下载时开始编译代码。
- WebAssembly 被设计为具有快速编译时间(导致网页加载速度很快),与 Java / JVM 语言相比,这是通过非常简单的验证规则来支持的。
- WebAssembly 的设计理念是 'host' 环境,即浏览器。
- WebAssembly 的设计既安全又简单,最大限度地减少了整体攻击面。
- WebAssembly 旨在支持多种语言(C、C++、Rust 等),而 JVM 最初是为单一语言设计的,Java。
一般来说,WebAssembly 旨在支持网络上的多种语言。 JVM 旨在支持桌面上的 Java。在更一般的意义上,它不会使任何一个比另一个更好。
最后JVM集成了浏览器(Java Applets),但最终没有成功!
JVM 可以运行:
- JavaScript
- Python(杰森)
- Ruby (JRuby)
- Groovy
- 斯卡拉
- C++(使用 JNI)
不幸的是,对 java 的支持已从浏览器中删除,因为 Sun(java 的前维护者)无法提供足够的支持。
就像闪电侠输了一样
据我了解,Java脚本不能提前编译,因为它是动态的。因此解释和即时编译发生在 运行 时间,这会影响 Java 脚本性能。所以 WebAssembly 应运而生。语言可以提前编译成中间格式 (WASM)。这提供了良好的性能,因为 运行 时间开销较少。
我的问题是为什么不能使用 JVM 代替 WebAssembly VM。 Java 编译成中间格式(字节码)。可以将该字节码提供给浏览器,JVM 可以执行它。 JVM 还支持 JIT,这有助于实现接近本机的性能。
那么新的 WebAssembly 需要什么。为什么JVM不能集成到浏览器中,利用现有最流行的Java语言实现高性能。
来自 WebAssembly High-Level Goals 的引用:
a Minimum Viable Product (MVP) for the standard with roughly the same functionality as asm.js, primarily aimed at C/C++;
所以他们最初的目标是 运行 C/C++ 网络浏览器中的程序,而不是 运行 Java 代码。
JVM 不被认为是替代 WebAssembly 的合适运行时的原因有很多...
- WebAssembly 的设计考虑了通过 HTTP 和基于浏览器的交付。因此,它支持流式编译——即您可以在下载时开始编译代码。
- WebAssembly 被设计为具有快速编译时间(导致网页加载速度很快),与 Java / JVM 语言相比,这是通过非常简单的验证规则来支持的。
- WebAssembly 的设计理念是 'host' 环境,即浏览器。
- WebAssembly 的设计既安全又简单,最大限度地减少了整体攻击面。
- WebAssembly 旨在支持多种语言(C、C++、Rust 等),而 JVM 最初是为单一语言设计的,Java。
一般来说,WebAssembly 旨在支持网络上的多种语言。 JVM 旨在支持桌面上的 Java。在更一般的意义上,它不会使任何一个比另一个更好。
最后JVM集成了浏览器(Java Applets),但最终没有成功!
JVM 可以运行:
- JavaScript
- Python(杰森)
- Ruby (JRuby)
- Groovy
- 斯卡拉
- C++(使用 JNI)
不幸的是,对 java 的支持已从浏览器中删除,因为 Sun(java 的前维护者)无法提供足够的支持。
就像闪电侠输了一样