It seems like .NET resolves some of the limitations of the JVM (around generics, lowering of float point code, I’m sure there are others). So if you want a managed language VM but some of the magic of C++, .NET might be a nice place to be.
Just a bad decision, which was not to bet that strongly into AOT (NGEN was only for faster startups).
While UWP (and its former incarnation on Windows 8.x) do use AOT, that is still a couple of releases away to join standard .NET tooling.
Naturally there is also Xamarin and Unity IL2CPP/Bust stacks, but they are special cases.
What does this refer to and how is it handled better in .net than in java?