Those VM designs are pretty heavily skewed towards class-based OO languages, though. Most VMs have some kind of behavior (polymorphic method lookup, unification, message-passing) that they do very efficiently because of the language they target, but others are omitted. For example, it isn't possible to do real tail-call optimization on the JVM without a trampoline, AFAIK. If it had been created for (say) ML, TCO would be a given, but OO stuff would be an afterthought.
The Erlang VM is another interesting platform, albeit one heavily skewed towards fault tolerance, concurrency, message passing, etc.
The Erlang VM is another interesting platform, albeit one heavily skewed towards fault tolerance, concurrency, message passing, etc.