收藏私塾在线
 

欢迎您来到私塾在线网!   

请登录! 

免费注册 

交流首页 » .NET »图解DotNet框架之一:编译与执行引擎(下)  XML
发表人 内容
netASP
[头像]

交流经验:
总积分:160
级别:普通会员
注册时间: 2011-11-02
文章: 16
离线

    (声明:本系列只想给大家介绍.net框架,并不是语法和类的使用的讲解,所以只能概括的描述一下所提到的类,如果有疑问可以到MSDN上面去查)            

 

 上一篇我们讲解了CIL,CTS,程序集等内容,并且留下了一个问题,就是.net如何跨平台,我们现在就来弄明白这个问题.由于篇幅有限,请大家参照第一篇的图.
按照流程图我们该讲解mscoree.dll了
         

        由相关的.net进程来加载Mscoree.dll,对于相关进程我们在后面讲到Winform,ASP.NET时,将继续讲解.
        mscoree.dll:公共对象运行库执行引擎.由他来寻找所有要加载的dll的位置并且加载他们(必须包含mscorlib.dll 他是核心类库,包含大量的核心类型,System,system.io等).然后读取程序集中的元数据.所以mscoree.dll又被称为CLR的垫片.

        CLR:公共语言运行库.前面我们已经启动了他的垫片,那么下来就要.net的灵魂人物出场了,他就是CLR,如同Java的虚拟机一样,.net缺少了他,就成了残废了,呵呵.在mscoree.dll加载了类型以后,CLR会以特定的机器CPU来加载对应的dll(mscorwk.dll或者mscorsrv.dll,这就是.net的性能为何很好的原因),然后CLR会在内存中为类型布局,将关联的CIL,运用JIT编译成特定平台的指令.嘿嘿,也许大家已经猜到了.net是如何跨平台的了吧.因为.net的dll实际是在运行时,才全部由各平台的JIT来编译成机器指令的.所以自然就可以跨平台喽.

        CLR中的GC:垃圾回收器. 我们知道.net中一般情况是不需要手动释放资源的,做过C++的人都知道手动释放资源意味着什么:莫名其妙的错误,无尽的深渊....,在.net中所有的托管资源都有GC这个保洁员来给你打扫卫生.CLR中会创建"对象图"和标示对象的"代".
        1.对象图说白了就是检查对象是否还可以在被引用.
        2.代这个概念是用来帮助GC快速的来检查哪些对象没有被引用,在.net中有0,1,2三代.0是新创建的对象,1是执行了一次回收以后,存在引用的对象,2是执行了一次以上回收,还没有被清理的对象.GC总是从0代开始回收,如果内存已经够用,则不对1代操作,否则就检查一代是否存在没有引用的对象.执行回收,如果还不够,就清理2代.

        我们来看看GC是如何工作的:

                     ABCDF被标示为  0代

            

我们现在回收0代的对象,因为BF没有引用,所以回收他们的内存,并且压缩托管堆.

                  现在  ACD被标示为  1代


        如果再来一次回收如果ACD依然没有被回收,那么他们就被标示为2代.OK,现在我们明白了GC是如何来释放资源的了.

       .net 进程:  一个.net进程中包含多个应用程序域,这就是.net平台操作系统独立性的关键特性,和完整的进程相比,应用程序域的CPU和内存都占用得比较少,因此CLR加载和卸载应用程序域(Appdomain)就快很多.
        应用程序域(Appdomain):其中包含多个需要的Dll和上下文(Context),也就是说每个Appdomain都有mscorlib.dll等dll,经过了这一步,就该是具体的应用程序了,如ASP.Net,WPF等不同形式的应用程序,再后续的文章里,将介绍他们的框架,最后再整合起来,就是完整的.net框架了,在这之前,我们先来学习一下.net中重要的几个Dll,给新  人打一下基础,高手们就不用看了,不过希望高手们可以指教一下。

 

下几篇中介绍.net中常用的Dll,然后再对各种应用程序做图解。

 

 

转自【徐 磊

这篇文章被编辑了 1 次. 最近一次更新是在 2011-11-02 16:44:21


推广链接
精品视频课程推荐

透彻理解JavaBean视频教程
深入浅出的讲解JavaBen的写法、JavaBean的用法、JavaBean的实现机制、JavaBean对应翻译的代码理解。

研磨设计模式——跟着cc学设计系列视频教程
本视频课程是北京Java私塾原创精品书籍《研磨设计模式》一书的配套学习视频,由《研磨设计模式》的第一作者CC录制 课程目标:全面、系统的掌握GoF设计模式的知识,达到可以在实际项目开发中运用的能力 技术要点:如何实现可配置、如何实现缓存以及缓存的管理、如何实现用缓存来控制多实例的创建、如何实现参数化工厂、 如何实现可扩展工厂、如何实现原型管理器、如何实现Java的静态代理和动态代理、如何实现多线程处理队列请求、 如何实现命令的参数化配置、可撤销的操作、宏命令、队列请求和日志请求、如何实现翻页迭代、如何检测环状结构、 如何实现通用的增删改查、如何模拟工作流来处理流程、如何实现简单又通用的XML读取、如何实现模拟AOP的功能......

log4j&slf4j基础实战视频教程
学习在java项目中使用log4j、jdk自带的日志框架和slf4j

Javascript基础视频教程
JavaScript的内置对象--Array、String、Date、Math等,可以通过DOM对象进行对象控制,创建控制菜单及复选框的控制,创建二级联动列表框及列表框选项的移动,JavaScript项目,创建基于JS的商品管理系统。

Hibernate4实战-独家视频教程
ORMapping的原理、1+N次问题、版本并发控制、开发的反模式、Open Session In View模式、抓取策略、集合性能、Hibernate运行原理、开发的最佳实践

yuzebaby
[头像]

交流经验:
总积分:4517
级别:VIP1
注册时间: 2012-07-19
文章: 400
离线

嘻嘻,谢谢啦



个性签名:每天进步一点点
 
交流首页 » .NET
前往:   

关于我们 | 联系我们 | 用户协议 | 私塾在线服务协议 | 版权声明 | 隐私保护

版权所有 Copyright(C)2009-2012 私塾在线学习网