.NET——CLR的环境

CLR2部分组成,即可执行文件和CLR的虚拟引擎(VEE)。

CLRVEE负责将中间语言转换成机器码,并负责执行,同时提供所需要的各种支持服务。类装载器(Class Loader负责将.NET类装载进内存并为它的执行做准备。在.NET程序执行的任何时刻,如果想调入一个新类,都需要类加载器来完成。类型检测器主要是在程序运行时刻来验证代码是否类型安全,提供运行时安全检查,是.NET平台在可靠性方面的较大该进。JIT编译器将对每个已经通过类型安全验证的方法进行编译,将其转换为托管本地代码。JIT只在方法的第一次调用的时候进行,已编译的本地代码会在内存中保存,但在下一次开机,执行进程或组件时,JIT会再次工作。JIT在编译时生成管理器定位和托管数据,代码管理器用此数据控制代码的执行,包括代码的异常处理、安全检查、调用支持、互操作支持、无用资源回收等。如下图所示:

 

 

 

 


 

 

 

 

 

 

 

 

 

 

 

 

.NET架构的思想基础依然是虚拟机原理。但.NET架构最重要的事实之一是它没有像JAVA那样的通用虚拟机技术,运行在CLR上的软件不是解释执行的,而是被完全编译的,并且像C++程序编译代码一样运行在机器一级。尽管.NET使用了中间语言,但.NET使用的是多阶段编译技术,最初编译为可移植的公用中间语言,最好在执行程序时JIT编译到最终的可执行格式。.NET编译架构总图如下:

 

上图应该是一个程序员心中的.NET编译器框架图,虽然复杂但它体现很多优点:

1        所有语言有一个共同的中间层,它们在该层上完全共享中间格式。当用某一种语言编写的某一段代码被编译成IL时,就把它与它的全部描述一起打包,把类、接口、属性、方法做为元数据格式存放。这就是.NET支持的语言能够完全集成,任何语言编写的模块混合能够创建单个应用程序的原因。

2         放弃了解释执行的方法。CLR在执行一个已经被转化成IL的程序时,它使用的是JITIL编译为本地代码。JIT是非常快速有效的,它甚至可以做到不编译中间代码未使用的部分,以介绍编译是时间。为了能节省编译的时间,CLRhaunted提供了预编译器(PRE JIT),当程序不需要移植时,PRE JITIL编译为永久本地代码。此外CLR还提供了一个ECONOJIT,它是一个压缩移动编译器,速度非常快,它编译高度优化的代码OPTILOPTILIL的一个高度优化的子集,专门为一些没有大量内存或大量计算能力的系统使用)

3         应用在PDA、手持设备、电话等小型设备上。

我们知道,CLR的环境的根本任务是管理和执行.NET代码,程序代码的执行过程,是每个程序员最关心的问题,同时对他们从本质上理解CLR环境也有很大的帮助。.NET程序执行过程可以简述为:首先由类装载器找到并装入对象,将其激活;检测器中验证程序对其进行类型验证;JIT将编译并转换为本地代码;同时可以动态对目标机器进行代码优化;执行代码,同时提供所需的其他服务(如安全检查、异常处理、垃圾回收等)。如下图:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值