通用语言运行时

来源:互联网 发布:逆火软件 编辑:程序博客网 时间:2024/05/01 19:34

1.通用语言运行时

         1.1概述:.net框架中的任何东西都依赖CLR;建立与CLR之上的软件,称为托管代码。

         1.2 CTS(通用类型系统):定义了核心语义没有定义语法,定义了值类型和引用类型

                   1.2.1值类型:都继承自ValueType;ByteCharint16int32int64Uint16Uint32Uint64SingleDouble

                   1.2.2引用类型:

类型成员:方法(Methods)、字段(Fields)、事件(Events)、属性(Properties

引用类型:ClassInterFaceArrayDelegate

                   1.2.3 两者区别:前者的实例被分配于堆栈,后者则只不过是一个位于堆栈的引用,指向一个被分配于堆的实值。

         1.3 CLS(通用语言规范):定义了一个庞大的CTS子集,任何语言如果想和其他的CLS语言互通,都必须遵从它。

         1.4编译托管代码

                   1.4.1MSIL(微软中间语言):定义了一套虚拟指令集,是CLR的汇编语言。含有操作堆栈的MSIL指令。

                   1.4.2Metadata(元数据):描述这些类及定义于此文件中

         1.5 程序集

                   1.5.1定义:程序集是一个逻辑上的构建,并不存在什么单一文件将所有必要的文件包裹成一个程序集.

                   1.5.2 特点:一个程序集可以由单一文件或一组文件构成.对于一个单文件程序集”,清单存储于文件自身.对于一个多文件程序集”,清单存储在程序集的头文件中.

                   1.5.3 分类:静态程序集VS程序生成,其内容被存储于磁盘上(一般CS程序).

                                      动态程序集直接在内存中生成,而后立即运行(asp.net所创建的).

         1.6 运行托管代码

                   1.6.1 装载:CLR确定程序版本,CLRGAC中查找,CLR检查应用程序配置文件内的codebase元素.

                   1.6.2 编译MSIL:CLR在装载完后,然后在每个方法第一次被调用时编译它,称为即时编译(JIT)

                   :JIT编译后的本地代码并未被保存于磁盘上,而是每次装载程序时都执行JIT

                   1.6.3 创建本地映像:用工具Ngen.exe生成制定程序集和制定处理器的MSIL代码到本地.

         1.7 垃圾回收

                   1.7.1 启动:CLR注意到堆被占满,便自动运行垃圾回收

                   1.7.2 原理:它扫描堆,寻找任何种类的垃圾(在堆上,没有被任何堆栈上的对象引用),搞清楚堆内那一部分是垃圾,它重新排列堆内容,更加紧密地排列那些还被使用的值.

                   1.7.3 策略:随着时间推移,具有较长寿面的对象,会被搬移到HEAP()尾部.在真实的软件里头,新生成的对象,也是最容易称为垃圾的对象.故搜新垃圾时先搜索最新分配的对象所在的地点.如果释放不够,则会搜索前一代对象,仍释放不够,则搜索全部对象.

                   1.7.4 终结器(Finalizers):开发人员可以重写对象的终结器,在一个拥有终结器的对象被释放前,这个特殊的方法将被记录在终结列表.最终这个列表中的所有终结器都会被调用.

         1.8应用程序域

                   1.8.1运行期宿主:它装载并初始化CLR,然后通常把控制权转给托管代码.