|
系列文章導(dǎo)航:
.NET Discovery 系列之一--string從入門(mén)到精通(上)
.NET Discovery 系列之二--string從入門(mén)到精通(勘誤版下)
.NET Discovery 系列之三--深入理解.NET垃圾收集機(jī)制(上)
.NET Discovery 系列之四--深入理解.NET垃圾收集機(jī)制(下)
.NET Discovery 系列之五--Me JIT(上)
.NET Discovery 系列之六--Me JIT(下)
.NET Discovery 系列之七--深入理解.NET垃圾收集機(jī)制(拾貝篇)
JIT(Just In Time簡(jiǎn)稱(chēng)JIT)是.NET邊運(yùn)行邊編譯的一種機(jī)制,這種機(jī)制的命名來(lái)源于豐田汽車(chē)在20世紀(jì)60年代實(shí)行的一種生產(chǎn)方式,中文譯為“準(zhǔn)時(shí)制”。
.NET 的JIT編譯器在設(shè)計(jì)初衷和運(yùn)行方式來(lái)上講,都與豐田汽車(chē)的這種“準(zhǔn)時(shí)生產(chǎn)”思想體系有著很大的相似之處,所以讓我們先來(lái)透過(guò)“準(zhǔn)時(shí)生產(chǎn)”方式來(lái)理解.NET的JIT機(jī)制吧。
“準(zhǔn)時(shí)生產(chǎn)”的基本思想可概括為“在需要的時(shí)候,按需要的量生產(chǎn)所需的產(chǎn)品”,這正是.NET JIT編譯器的設(shè)計(jì)初衷,即在需要的時(shí)候編譯需要的代碼。
第一節(jié).Me JIT
以C#為例,在C#代碼運(yùn)行前,一般會(huì)經(jīng)過(guò)兩次編譯,第一階段是C#代碼向MSIL的編譯,第二階段是IL向本地代碼的編譯。第一階段的編譯成果是生成托管模塊,第二階段的編譯成果是生成本地代碼以供運(yùn)行,從這里各位同學(xué)可以看出,第一階段生成的MSIL是不能直接運(yùn)行的。
這里先要解釋一下什么是MSIL和托管模塊。
MSIL:
MSIL 全稱(chēng)為Microsoft Intermediate Language,中文譯為“微軟中間語(yǔ)言”,它是一種介于高級(jí)語(yǔ)言和匯編語(yǔ)言之間的偽匯編語(yǔ)言(姑且這么叫,各位有不同意見(jiàn)的同學(xué)不必激動(dòng))。當(dāng)用戶編譯運(yùn)行一個(gè).NET程序時(shí),高級(jí)語(yǔ)言編譯器會(huì)將源代碼翻譯成一組可以獨(dú)立于CPU的指令。
可以看出IL 包括用于加載(ldstr )、存儲(chǔ)(壓棧、彈棧)和初始化對(duì)象(locals)以及調(diào)用對(duì)象方法(call)的指令,還包括用于算術(shù)和邏輯運(yùn)算、控制流、直接內(nèi)存訪問(wèn)、異常處理和其他操作的指令。
C#代碼:
string str_test = "test";
System.String Str_test = "test";
NET技術(shù):.Net Discovery 系列之五--Me JIT(上),轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。