您的位置:首页 > 其它

通用语言运行时---.NET开发的‘基本内功’

2010-06-01 22:47 267 查看
1.通用语言运行时

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

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

1.2.1值类型:都继承自ValueType;Byte、Char、int16、int32、int64、Uint16、Uint32、Uint64、Single、Double

1.2.2引用类型:

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

引用类型:Class,InterFace,Array,Delegate

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确定程序版本,CLR在GAC中查找,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,然后通常把控制权转给托管代码.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐