I know Java now comes with a JIT too, but the JVM architecture and bytecodes were designed to be interpreted so the have to make several trade-offs to ensure this is possible. On the other hand, .NET was designed from the start to run as native code, using IL as an intermediate step. For these reasons, I don't think that there is a semantic similarity between the JVM and the CLR. Maybe it may help to visualize them as similar, but once you hit the details, there are so many architectural differences that the similarity doesn't hold and just confuses people.
A complex system that does not work is invariably found to have evolved from a simpler system that worked just fine. - Murphy's Law of Computing