When you compile a program developed in language that target CLR, instead of compiling the source code into machine level code the compiler translate it into intermediate language. No matter which language is used to develop the application, it always gets translated in IL (Intermediate Language). This ensures language interoperability.

  •  In addition to translating the code into IL the compiler also produce the metadata during the process of compilation.
  • The IL and metadata are link an assembly.
  • The compiler creates the .EXE or .DLL file.
  • When you execute the .EXE or.DLL file, the converted into IL and all other relevant information from the base class library is sent to class loader. The class loader loads the code into the memory.
  • Before the code can be executed, the .NET Framework needs to convert IL into native or CPU specific code. The JUST IN TIME (JIT) Compiler translates the code from IL into managed native code. During the process of compilation the JIT compiler compiles only the code that is the required during execution instead of compiling the complete IL code when an uncompelled method is invoked the JIT compiler converts the IL for that method into native code. The process saves time and memory required to convert the complete IL into native code.
  • During JIT compilation the code is also check for type safety. Type safety ensure that objects are always are accessed in a compatible way.
  • After translating the IL into native code, the converted code is sent to the .NET runtime manager.
  • The .NET runtime manager executes the code. While executing the code the security check is performed to ensure the code has appropriate permission for accessing the available resources.