Почему JVM не может использоваться вместо WebAssembly? - PullRequest
3 голосов
/ 27 сентября 2019

Насколько я понял, JavaScript не может быть скомпилирован заранее из-за его динамической природы.Таким образом, интерпретация и своевременная компиляция происходят во время выполнения, что влияет на производительность JavaScript.Итак, WebAssembly входит в картину.Языки могут быть заранее скомпилированы в промежуточный формат (WASM).Это дает хорошую производительность, поскольку затраты времени выполнения меньше.

Мой вопрос заключается в том, почему JVM нельзя использовать вместо виртуальной машины WebAssembly.Java скомпилирована в промежуточный формат (байт-код).Этот байт-код может быть передан в браузер, и JVM может выполнить его.JVM также поддерживает JIT, что помогает достичь почти собственной производительности.

Так что же нужно для новой WebAssembly.Почему нельзя интегрировать JVM в браузер и добиться высокой производительности, используя самый популярный язык Java.

Ответы [ 3 ]

11 голосов
/ 27 сентября 2019

Существует множество причин, по которым JVM не считалась подходящей средой выполнения вместо WebAssembly ...

  • WebAssembly была разработана с учетом доставки по HTTP и с учетом браузера.По этой причине он поддерживает потоковую компиляцию - то есть вы можете начать компилировать код во время загрузки.
  • WebAssembly была разработана для быстрой компиляции (что приводит к быстрой загрузке веб-страниц), это поддерживается благодаря очень простойправила проверки по сравнению с языками Java / JVM.
  • WebAssembly был разработан с концепцией среды хоста, то есть браузера.
  • WebAssembly был разработан, чтобы быть безопасным и простым, сводя к минимуму общееповерхность атаки.
  • WebAssembly был разработан для поддержки множества языков (C, C ++, Rust, ...), тогда как JVM изначально была разработана для одного языка, Java.

Как общее замечание, WebAssembly был разработан для поддержки нескольких языков в Интернете.JVM была разработана для поддержки Java на рабочем столе.Это не делает ни одного лучше другого в более общем смысле.

Наконец, JVM была интегрирована с браузером (Java-апплетами), но в итоге это не сработало!

2 голосов
/ 27 сентября 2019

Цитата из Цели высокого уровня WebAssembly:

Минимальный жизнеспособный продукт (MVP) для стандарта с примерно такой же функциональностью, что и asm.js, прежде всегонацелен на C / C ++;

Поэтому их первоначальной целью было запускать программу на C / C ++ в веб-браузере, а не запускать код Java.

1 голос
/ 27 сентября 2019

Большая часть времени выполнения JS тратится на отправку кода с сервера клиенту .Байт-код имеет тенденцию быть больше, чем фактический исходный код, поэтому компиляция в байт-код не обязательно ускоряет процесс .

Сам JS уже выполняется достаточно быстро в большинствеслучаи (JIT-компиляция выполняется не только JVM).В тех редких случаях, когда производительность действительно имела значение (манипулирование большими наборами данных, выполнение большого количества вычислений, например, игровых движков), JS работает медленно из-за своей динамической природы (именуемый сбор мусора, замыкания, ...).Это именно то, что решает WASM, он работает без сбора мусора и, следовательно, может быть значительно быстрее в этих конкретных случаях.

JVM не является подходящим инструментом для работы здесь.

...