(转)什么是.NET?什么是CLI?什么是CLR?IL是什么?JIT是什么,它是如何工做的?GC是什么,简述一下GC的工做方式?

转自: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边运行边编译的一种机制。

工做方式:

开发人员须要经过ILCLR进行交流虽然IL自己支持一些面向对象的概念可是对于开发人员来说仍是过于复杂低效因而C#应运而生程序员只需编写C#代码, csc编译器会将其翻译成IL;虽然CLR理解IL, 可是CPU只认识二进制指令因此CLR须要JIT的帮助IL翻译成CPU指令. JIT按需工做当一个.NET方法即将被执行时, JIT会介入把该方法(IL指令编译成CPU指令并保存以供重用.

6:什么是GC,以及它的工做方式?

GC:.NET Framework 的垃圾回收器管理应用程序的内存分配和释放

工做方式:每次您使用 new 运算符建立对象时,运行库都从托管堆为该对象分配内存。只要托管堆中有地址空间可用,运行库就会继续为新对象分配空间。可是,内存不是无限大的。最终,垃圾回收器必须执行回收以释放一些内存。垃圾回收器优化引擎根据正在进行的分配状况肯定执行回收的最佳时间。当垃圾回收器执行回收时,它检查托管堆中再也不被应用程序使用的对象并执行必要的操做来回收它们占用的内存。

.NET运行机制以下图:

 

相关文章
相关标签/搜索