WebAssembly の代わりに JVM を使用できないのはなぜですか? [closed] 質問する

WebAssembly の代わりに JVM を使用できないのはなぜですか? [closed] 質問する

私が理解している限りでは、JavaScript は動的な性質のため、事前にコンパイルすることはできません。そのため、解釈とジャストインタイムのコンパイルは実行時に行われ、JavaScript のパフォーマンスに影響します。そこで、WebAssembly が登場します。言語は、事前に中間形式 (WASM) にコンパイルできます。これにより、実行時のオーバーヘッドが少なくなり、パフォーマンスが向上します。

私の疑問は、なぜ JVM を WebAssembly VM の代わりに使用できないのかということです。Java は中間形式 (バイトコード) にコンパイルされます。このバイトコードはブラウザに渡すことができ、JVM で実行できます。JVM は JIT もサポートしており、ネイティブに近いパフォーマンスを実現できます。 

では、新しい WebAssembly の必要性は何でしょうか。既存の最も人気のある Java 言語を活用して、JVM をブラウザーに統合し、高いパフォーマンスを実現できないのはなぜでしょうか。

ベストアンサー1

JVM が WebAssembly の代わりの適切なランタイムではないと判断された理由はたくさんあります...

  • WebAssembly は、HTTP 経由の配信とブラウザベースを念頭に置いて設計されています。そのため、ストリーミング コンパイルがサポートされています。つまり、ダウンロードしながらコードのコンパイルを開始できます。
  • WebAssembly は、コンパイル時間が短くなるように設計されており (Web ページの読み込みが速くなります)、これは Java / JVM 言語に比べて非常にシンプルな検証ルールによってサポートされています。
  • WebAssembly は、「ホスト」環境、つまりブラウザという概念に基づいて設計されました。
  • WebAssembly は、全体的な攻撃対象領域を最小限に抑え、安全かつシンプルになるように設計されています。
  • WebAssembly は多数の言語 (C、C++、Rust など) をサポートするように設計されましたが、JVM は当初単一の言語である Java 用に設計されました。

一般的に言えば、WebAssembly は Web 上で複数の言語をサポートするために設計されました。JVM はデスクトップ上で Java をサポートするために設計されました。より一般的な意味では、どちらかが他方より優れているということはありません。

最終的に、JVM はブラウザ (Java アプレット) と統合されましたが、結局はうまくいきませんでした。

おすすめ記事