.NET Framework的核心是CLR,在CLR控制下的代码称为托管代码。
1. 在.NET中编译分为两个阶段:
(1) 把源代码编译为IL.
(2) CLR把IL编译为平台专用代码.
2. 托管代码的优点:
(1) 平台无关性
(2) IL总是JIT编译,性能高.( 而Java总是解释性编译.)
<1> JIT一次只执行它调用的那部分代码,编译后可执行代码存储起来,下次无需重新编译。
<2> 编译的最后阶段-运行时,JIT编译器能识别不同的处理器,根据处理器的特性和其提供的指令,优化最后的可执行代码。
(3) 语言互操作性,CLS和CTS一起确保语言的互操作性。
3.垃圾收集
三种方式收集垃圾:
(1) 手工方式,如C++,但容易造成内存泄漏。
(2) 对像引用计数,如COM,但需客户通知完成内存使用,甚至可能COM对象存在自己进程中,从不被系统删除。
(3) .NET使用垃圾收集器,当检测到给定进程的托管堆已满,就调用之。删除不再被引用的对象。
4. 进程、线程、应用程序域
<2> 进程是指在系统中独立运行并作为资源分配的基本单位。
因为要并发,所以引入进程,因为并发,所以进程要不断的创建、撤消、切换,又因为进程是资源的拥有者,所以在这个过程中,系统必为之付出较大的时空开销,因此引入线程。
<3> 线程是进程中的一个轻型实体,是被系统调度和分派的基本单位。
引入线程后,把线程作为被系统调度和分派的基本单位,而进程作为拥有资源的基本单位。
进程可以并发,线程也可以并发。同一进程中的线程切换不引起进程间的切换,这是效率提高的关键。
<4>应用程序域.
在.net出现以前,一个进程下,只能运行一个应用程序,因为进程是相互独立的,所以这造成不同的应用程序互访的不便。而现在,通过CLR提供应用程序之间的隔离,在单个进程中能运行几个应用程序域(节省了开销),每个应用程序域基本对应一个应用程序。
应用程序域和线程之间不具有一对一的相关性,在单个应用程序域中可以执行几个线程,而且特定线程并不局限在单个应用程序域内。
转自:http://www.cnblogs.com/vasty/archive/2008/11/11/1331294.html