Is this correct?
Java:
Java code is compiled into Byte Code which is stored in a ".class" file until runtime. At runtime, the Java Virtual Machine interprets the Byte Code and then executes machine code accordingly. At no point is the Java Byte Code compiled directly into machine code.
.NET:
Code written in any .NET language (C#, VB.NET, C++.NET, etc.) is compiled into MSIL, which is stored in an assembly file. At runtime, the Common Language Runtime compiles that MSIL directly into machine code, which is then executed. Depending on the compilation settings, the JIT compilation results (MSIL -> machine code) may be cached for future use. It is also possible to use the NGen.exe tool to manually compile MSIL directly into machine code, and distribute an application like that.
Java:
Java code is compiled into Byte Code which is stored in a ".class" file until runtime. At runtime, the Java Virtual Machine interprets the Byte Code and then executes machine code accordingly. At no point is the Java Byte Code compiled directly into machine code.
.NET:
Code written in any .NET language (C#, VB.NET, C++.NET, etc.) is compiled into MSIL, which is stored in an assembly file. At runtime, the Common Language Runtime compiles that MSIL directly into machine code, which is then executed. Depending on the compilation settings, the JIT compilation results (MSIL -> machine code) may be cached for future use. It is also possible to use the NGen.exe tool to manually compile MSIL directly into machine code, and distribute an application like that.