Found a research paper comparing Java and .NET bytecodes, titled "Stacking them up: A Comparison of Virtual Machines". Most interesting conclusion: The .NET execution engine wasn't designed to support interpretation, so it's not well suited for small footprint devices.