首页 百科知识 的突出特色

的突出特色

时间:2023-10-19 百科知识 版权反馈
【摘要】:代指堆中对象产生的先后,这样垃圾收集器在将发生溢出时回收属于特定的代的对象,而不是回收堆中的所有对象。在.NET中,一个基本的设计方针是使用孤立的组件。.NET应用程序间的共享代码是明确定义的,共享集合需要一些额外的规则来避免今天遇到的共享冲突问题、共享代码必须有一个全局唯一的名称,系统必须提供名称保护,且每当引用共享集合时,CLR将对版本信息进行检查。

1.4.3 CLR的突出特色

跨语言集成的能力

CLR包含了一个丰富的语言特性集,保证了它与各种程序设计语言的兼容性。

内存管理自动化

在执行过程中管理应用程序的资源是一项单调而困难的工作,它会将程序员的注意力从本应解决的问题中引开,而垃圾收集机制完全解决了程序员在编程过程中头痛的问题,跟踪内存的使用,并知道何时将它们释放。在面向对象的环境中,每种类型都标识了对应用有用的某种资源,为了使用这些资源,需要为类型分配内存。在应用中访问一种资源要通过以下步骤:

·为类型分配内存;

·初始化内存,设置资源的初始状态并使其可用;

·通过访问该类型的实例成员来访问资源;

·卸下将被清除的资源状态;

·释放内存。

这一看似简单的过程在实际的编程中是产生程序错误的主要来源之一,更可怕的是,内存中的错误往往导致不可预见的结果。

CLR要求所有的资源从可操控的堆(一种内存结构)中分配。当一个进程被初始化后,CLR保留了一个未被分配的地址空间,这一区域叫做可操控堆,在堆中保持了指向下一个将被分配给对象的堆地址的指针NEXT。初始状态下,该指针保留地址空间的基地址。一个应用使用新的操作产生对象时,首先检查新对象需要的字节大小是否会超出保留空间,如果对象大小合适,NEXT指针将指向堆中的这个对象,该对象的构造器被调用,新的操作返回对象的地址。地址空间不够大时,堆将发现这一点,通过将新对象的大小与NEXT指针相加,并与堆的大小进行比较,调用垃圾收集器。在这里CLR引入了代的概念。代指堆中对象产生的先后,这样垃圾收集器在将发生溢出时回收属于特定的代的对象,而不是回收堆中的所有对象。

即时编译

在各种语言的编译器对源代码进行编译之后,在CLR环境中产生的是中间代码,出于兼容性与跨语言集成的考虑,其内容虽然有效,但在转化为本地代码之前它本身是不可执行的,这就是JIT编译器需要完成的工作。

这里需要说明一个问题:为什么要即时编译,而不是一次性地将中间代码文件进行编译?原因在于效率。在大型的应用中,很少会用到程序的全部功能,这种边执行边编译的措施比一次性的完全编译效率更高。

解决版本与发布问题

在当前以组件为基础的系统中,开发人员和用户对于软件版本和发布中存在的问题已经十分熟悉了:当安装一个新的应用之后,很可能发现原本正常的某个应用程序奇怪地停止了工作。绝大多数开发人员将时间花在了确保所有注册表入口的一致性,以便激活COM类上,这就是所谓的DLL地狱。.NET平台通过使用集合来解决这一问题,在这里集合是一个专有名词,指类型与资源的发布单元,在很大程度上它等同于DLL。正像.NET用元数据描述类型一样,它也用元数据描述包含类型的集合。通常说来,集合由四个部分组成:集合的元数据、集合的内部清单、元数据描述的类型、实现类型的中间语言代码和一组资源。在一个集合中,以上四个部分并不是都必须存在,但是必须包含类型或资源,这样集合才有意义。

在.NET中,一个基本的设计方针是使用孤立的组件。一个孤立的集合的含义是一个集合只能被一个应用所访问;在一台机器上,它不被多个应用共享,也不会受其他应用程序对系统的更改的影响。孤立赋予了开发人员在自己开发的程序中对代码的完全控制权,任何共享代码都需要被明确地标识。但.NET框架也支持共享集合的概念,一个共享集合指在一台机器上被多个应用共享的集合,共享集合需要遵循严格地命名规定。.NET应用程序间的共享代码是明确定义的,共享集合需要一些额外的规则来避免今天遇到的共享冲突问题、共享代码必须有一个全局唯一的名称,系统必须提供名称保护,且每当引用共享集合时,CLR将对版本信息进行检查。.NET框架允许应用或管理员在明确说明的版本政策下重写集合的版本信息。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈