JVM solves a very different problem. It makes some very strong assumptions: everything is an object (no functions!), garbage collection, no easy structs, etc. All this prevents easy porting of lots of existing software written in C, C++, Fortran, etc. In exchange you can be oblivious of the underlying OS and even CPU architecture.
Instead, x64 virtualization easily allows to run not just your existing software, but your existing OS, at practically native speed.