|
系列文章导航:
.NET Discovery 系列之一--string从入门到精通(上)
.NET Discovery 系列之二--string从入门到精通(勘误版下)
.NET Discovery 系列之三--深入理解.NET垃圾收集机制(上)
.NET Discovery 系列之四--深入理解.NET垃圾收集机制(下)
.NET Discovery 系列之五--Me JIT(上)
.NET Discovery 系列之六--Me JIT(下)
.NET Discovery 系列之七--深入理解.NET垃圾收集机制(拾贝篇)
JIT(Just In Time简称JIT)是.NET边运行边编译的一种机制,这种机制的命名来源于丰田汽车在20世纪60年代实行的一种生产方式,中文译为“准时制”。
.NET 的JIT编译器在设计初衷和运行方式来上讲,都与丰田汽车的这种“准时生产”思想体系有着很大的相似之处,所以让我们先来透过“准时生产”方式来理解.NET的JIT机制吧。
“准时生产”的基本思想可概括为“在需要的时候,按需要的量生产所需的产品”,这正是.NET JIT编译器的设计初衷,即在需要的时候编译需要的代码。
第一节.Me JIT
以C#为例,在C#代码运行前,一般会经过两次编译,第一阶段是C#代码向MSIL的编译,第二阶段是IL向本地代码的编译。第一阶段的编译成果是生成托管模块,第二阶段的编译成果是生成本地代码以供运行,从这里各位同学可以看出,第一阶段生成的MSIL是不能直接运行的。
这里先要解释一下什么是MSIL和托管模块。
MSIL:
MSIL 全称为Microsoft Intermediate Language,中文译为“微软中间语言”,它是一种介于高级语言和汇编语言之间的伪汇编语言(姑且这么叫,各位有不同意见的同学不必激动)。当用户编译运行一个.NET程序时,高级语言编译器会将源代码翻译成一组可以独立于CPU的指令。
可以看出IL 包括用于加载(ldstr )、存储(压栈、弹栈)和初始化对象(locals)以及调用对象方法(call)的指令,还包括用于算术和逻辑运算、控制流、直接内存访问、异常处理和其他操作的指令。
C#代码:
string str_test = "test";
System.String Str_test = "test";
NET技术:.Net Discovery 系列之五--Me JIT(上),转载需保留来源!
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。