轉自:http://www.cnblogs.com/haofaner/articles/2288968.htmlhtml
1:什麼是.NET?程序員
NET 是 Microsoft 的用以建立 XML Web 服務(下一代軟件)平臺,該平臺將信息、設備和人以一種統一的、個性化的方式聯繫起來。藉助於 .NET 平臺,能夠建立和使用基於 XML 的應用程序、進程和 Web 站點以及服務,它們之間能夠按設計、在任何平臺或智能設備上共享和組合信息與功能,以向單位和我的提供定製好的解決方案。 .NET 是一個全面的產品家族,它創建在行業標準和 Internet 標準之上,提供開發(工具)、管理(服務器)、使用(構造塊服務和智能客戶端)以及 XML Web 服務體驗(豐富的用戶體驗)。.NET 將成爲您今天正在使用的 Microsoft 應用程序、工具和服務器的一部分,同時,新產品不斷擴展 XML Web 的服務能力以知足您的全部業務需求。可是對於咱程序員來講這樣理解它是否感受太概念化了,估計也很難有人去記住這些概念。下面是我認爲比較好的理解,也不知道說的可對?服務器
.NET是微軟的新一代技術平臺,爲敏捷商務構建互聯互通的應用系統,這些系統是基於標準的,聯通的,適應變化的,穩定的和高性能的。工具
從技術的角度,一個.NET應用是一個運行於.NET Framework之上的應用程序。(更精確的說,一個.NET應用是一個使用.NET Framework類庫來編寫,並運行於公共語言運行時 Common Language Runtime之上的應用程序。)若是一個應用程序跟.NET Framework無關,它就不能叫作.NET程序。好比,僅僅使用了XML並不就是.NET應用,僅僅使用SOAP SDK調用一個Web Service也不是.NET應用。性能
2:什麼是CLR?優化
CLR(公用語言運行時)和Java虛擬機同樣也是一個運行時環境,它負責資源管理(內存分配和垃圾收集),並保證應用和底層操做系統之間必要的分離。.NET提供了一個運行時環境,叫作公用語言運行時(Commen Language Runtime),是一種多語言執行環境,支持衆多的數據類型和語言特性。他管理着代碼的執行,並使開發過程變得更加簡單。這是一種可操控的執行環境,其功能經過編譯器與其餘工具共同展示。spa
3:什麼是CLI?操作系統
通用語言基礎結構(Common Language Infrastructure,CLI)是CLR的一個子集,也就是.NET中最終對編譯成MSIL代碼的應用程序的運行環境進行管理的那一部分。在 CLR結構圖中CLI位於下半部分,主要包括類加載器(Class Loader)、實時編譯器(IL To Native Compilers)和一個運行時環境的垃圾收集器(Garbage Collector)。CLI是.Net和CLR的靈魂,CLI爲IL代碼提供運行的環境,你能夠將使用任何語言編寫的代碼經過其特定的編譯器轉換爲 MSIL代碼以後運行其上,甚至還能夠本身寫MSIL代碼在CLI上面運行。翻譯
4:什麼是IL?(引自老趙本身的解析)設計
IL是微軟.NET平臺上衍生出來的一門中間語言,.NET平臺上的各類高級語言(如C#,VB,F#)的編譯器會將各自的文字表述方式轉化爲 IL。各類不一樣的文字形式最終被統一到了IL的表述方式,其中包含了.NET平臺上的各類元素,如「範型」,「類」、、「接口」、「模塊」、「屬性」等等。值得注意的是,各類高級語言自己可能根本沒有這些「概念」在裏頭,如IronScheme是一個在.NET平臺上的Scheme語言實現,其中根本沒有前面提到的這些IL——亦或說是.NET平臺上的名詞。IL自己並不知道本身是由哪一種高級語言轉化而來的,哪一種語言中有哪些特性,IL也根本不會關心。
誰來關心這些呢?天然是各語言的編譯器了。這就是.NET平臺上的高級語言的第一次轉化:高級語言 => IL。
5:什麼是JIT?
JIT(Just In Time簡稱JIT)是.Net邊運行邊編譯的一種機制。
工做方式:
開發人員須要經過IL與CLR進行交流, 雖然IL自己支持一些面向對象的概念, 可是對於開發人員來說仍是過於複雜低效, 因而C#應運而生, 程序員只需編寫C#代碼, csc編譯器會將其翻譯成IL;雖然CLR理解IL, 可是CPU只認識二進制指令, 因此CLR須要JIT的幫助, 將IL翻譯成CPU指令. JIT按需工做, 當一個.NET方法即將被執行時, JIT會介入, 把該方法(IL指令) 編譯成CPU指令, 並保存以供重用.
6:什麼是GC,以及它的工做方式?
GC:.NET Framework 的垃圾回收器管理應用程序的內存分配和釋放
工做方式:每次您使用 new 運算符建立對象時,運行庫都從託管堆爲該對象分配內存。只要託管堆中有地址空間可用,運行庫就會繼續爲新對象分配空間。可是,內存不是無限大的。最終,垃圾回收器必須執行回收以釋放一些內存。垃圾回收器優化引擎根據正在進行的分配狀況肯定執行回收的最佳時間。當垃圾回收器執行回收時,它檢查託管堆中再也不被應用程序使用的對象並執行必要的操做來回收它們佔用的內存。
.NET運行機制以下圖: