CLR的语言编译器开发的代码称为托管代码
使用基于CLR的语言编译器开发的代码称为托管代码。 
托管堆是CLR中自动内存管理的基础。初始化新进程时,运行时会为进程保留一个连续的地址空间区域。这个保留的地址空间被称为托管堆。托管堆维护着一个指针,用它指向将在堆中分配的下一个对象的地址。最初,该指针设置为指向托管堆的基址。 
CLR和Java虚拟机一样也是一个运行时环境,它负责资源管理(内存分配和垃圾收集),并保证应用和底层操作系统之间必要的分离。
为了提高平台的可靠性,以及为了达到面向事务的电子商务应用所要求的稳定性级别,CLR还要负责其他一些任务,比如监视程序的运行。按照.NET的说法,在CLR监视之下运行的程序属于“受管理的”(managed)代码,而不在CLR之下、直接在裸机上运行的应用或者组件属于“非受管理的”(unmanaged)的代码。
CLR将监视形形色色的常见编程错误,许多年来这些错误一直是软件故障的主要根源,其中包括:访问数组元素越界,访问未分配的内存空间,由于数据体积过大而导致的内存溢出,等等。
然而,这种对受管理代码的运行监视是有代价的。虽然当前还不可能精确地得到监视程序运行所需要的开销,但从当前Beta测试版的性能表现来看,正如Microsoft所承认的那样,我们可以预料由它导致的性能降低程度至少达到10%。当然,如果监视程序运行能够将稳定性和可用性提高到一个新的档次,我们可以怀疑10%的性能降低是否还可以称为一件坏事……
在处理器性能改善方面,摩尔定律已经一再被证明是正确的。既然如此,我们要得到一台性能增加了10%的服务器要等待多长时间呢
下面列举一下俺从学习中总结出的几点: 
1:垃圾回收的用途,优势。
这个,似乎不用多讲。但可能对于C++程序员,得说上两句。
对于内存管理,C++程序员总是又爱又恨。爱来源于对能完全控制内存的自豪。恨是因为来无影去无踪的内存读写错误、内存泄漏。好了,C++程序的福音到了,.NET中,凡是拖管方式分配的内存。完全由系统回收,开发者无需理会。这实在是令人振奋不已。(嘿,慢着,这世界上从来没有免费的午餐,你当然会为此付出代价地)。
2:垃圾回收的原理
说到原理,不可能一两句话说清。偶只能简单描述一下,具体可自已去看MSDN资料。
首先,托管代码为引用类型分配的内存在托管堆中,当托管堆到达一定满度(容量)时,执行垃圾收集算法。
2.1:垃圾回收算法依赖于对源码编译时建立的对象/地址表,根据程序当前运行的执行点,进行智能判定,确定已无用的对象内存,进行收集,进行必要压缩,重新指定待分配内存在首地址。未收集的打上标记,提升级别。
2.2:级别一般是三级。每级设置回收触发条件的不同阀值,达到阀值,开始收集。有资料将其称为代龄。注意:大尺寸的对象总被认为是最高代龄的对象(第2代)。
2.3:对于回收对象,如果实现了Finalize,在收集前,会利用复苏机制,对其复苏,调用终止化方法,然后再回收。
13.概述.NET中的GC机制(垃圾回收)。 
答:GC的全称是garbage collection,中文名称垃圾回收,是.NET中对内存管理的一种功能。垃圾回收器跟踪并回收托管内存中分配的对象,定期执行垃圾回收以回收分配给没有有效引用的对象的内存。当使用可用内存不能满足内存请求时,GC会自动进行。
在进行垃圾回收时,垃圾回收器会首先搜索内存中的托管对象,然后从托管代码中搜索被引用的对象并标记为有效,接着释放没有被标记为有效的对象并收回内存,最后整理内存将有效对象挪动到一起。
abstract抽象类不能new 
继承的非抽象类可以new 
然后用基类引用指向子类完成多态 
1.你决定去泡MM,明确泡的是MM而不是GG,这是抽象类。
2.在是MM的前提下,根据MM的身高、身材、MiMi大小等划定一个范围,这是继承。
3.有的MM面目可憎,可是有魔鬼身材,你也决定把她纳入你的范围,这是重写。
4.你比较忙,把你的要求告诉你哥们,让他帮你留意,这是委托。
5.你哥们根据你的要求,找到了一个,但他确居为私有,这是异常。
6.由你选定的范围具体到某一MM,这是实例化。
7.你带MM逛商场,一路上MM唠叨不停,你不胜其烦,把她寄存起来,这是序列化。
8.你自己逛完,从寄存处带MM回去,这是反序列化。
9.你对MM不满意或者MM对你不满意,和你ByeBye了,接着你又泡了几个MM,还是ByeBye了,你痛定思痛,总结出一套泡MM的方法,并且决定以后按这套方法泡MM,这是封装。
10.你和你公司的几个MM同时保存恋爱关系,这是.net remoting。
11.你在网上找到一个MM,可是这个MM通过网络,同时在和几个GG网恋,这是Web Service。
12.在你泡的几个MM中,你带她们逛商场,有的喜欢买衣服,有的喜欢买化妆品,这是重载。
13.你发现泡MM都有一个Kiss的过程,这是接口。
14.你有点心灰意冷,决定让婚介公司帮你找个适合的MM,这是依赖注入或者控制反转。 
2.4:.NET支持弱引用机制,对于弱引用,垃圾回收有不同对待。弱引用主要用于特珠性况下的节省内存。 
令我感兴趣的是垃圾回收的算法,按照原理可以看出,在生存期内的对象也有可能被回收,这正是我前文说过的它的效率高于C++的原因之一。另外,由于内存成块,连续,它的收集的速度非常之快。
声明方法的存在而不去实现它的类被叫做抽像类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽像类,并让它指向具体子类的一个实例。不能有抽像构造函数或抽像静态方法。Abstract 类的子类为它们父类中的所有抽像方法提供实现,否则它们也是抽像类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。
接口(interface)是抽像类的变体。在接口中,所有方法都是抽像的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽像的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对像上调用接口的方法。由于有抽像类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。
 
                    
                 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号