The primary benefits of webassembly are completely different from the benefits of the JVM. The JVM works at a higher level of abstraction, does garbage collection and imposes many other specific ways of doing things, and is strongly aimed towards a specific language even if it can host other languages.
Webassembly on the other hand works at a lower level of abstraction and runs the applications more or less unchanged, and can be viewed as another compilation target. However, its killer app compared to something like compile-to-C or LLVM which also offers portability via flexible compilation targets, and where the JVM was also lacking, is the fact that it comes with a built-in security model. It was inherently designed for a platform where running untrusted code is a core requirement, and is the first such compilation target to really catch on.
Since a large portion of all new written code now runs in the cloud or in the browser and is inherently untrusted, that is really huge with regards to adoption. The fact that the compiled code inherently has limitations means that you can run many untrusted code WASM-compiled snippets from different users in the same process safely and write things like serverless REST endpoints.
It also means that you can explore new concurrency models, such as Lunatic, that offers multilingual Erlang-process like semantics where synchronous code written in any language can be sandboxed into lightweight processes and run by a preemptive scheduler, which is achievable because of Wasm being inherently sandbox-friendly so that you have strong guarentees with regards to what any piece of wasm code is allowed to do.