.net GC垃圾回收机制回收的是什么?

  .net开发人员都知道.net有个GC垃圾回收器,使开发人员不用再去花费心思考虑内存回收问题。但是,有很多程序员并不清楚,垃圾回收器到底回收哪些资源。   

  数据类型分为值类型和引用类型,前者的数据存放在栈中,后者的数据存放在堆中。俩种数据类型的使用无处不在,故很多程序员都错以为栈中和堆中的资源都会回收,这种观点就错误了!一般没研究过垃圾回收机制的程序员都很容易陷入这个误区。

  那.net垃圾回收器到底回收哪些资源呢?

  .netGC垃圾回收器,只回收托管堆中的内存资源,不回收其他资源(数据库连接、文件句柄、网络端口等)。[这里解释下什么是托管代码:由CLR来执行的代码]

  下面就以最简洁的方式介绍下.net 垃圾回收:

  .NET Framework 的垃圾回收器管理应用程序的内存分配和释放。每当您使用new 运算符创建对象时,公共语言运行时都会从托管堆为该对象分配内存。只要托管堆中有地址空间可用,运行时就会继续为新对象分配空间。但是,内存不是无限大的。最终,垃圾回收器必须执行回收以释放一些内存。垃圾回收器优化引擎根据正在进行的分配情况确定执行回收的最佳时间。当垃圾回收器执行回收时,它检查托管堆中不再被应用程序使用的对象并执行必要的操作来回收它们占用的内存。

  1、首先垃圾回收是CLR(公共语言运行时)的一个核心功能。

  2、目的就是提高内存利用率。

  3、只回收托管堆中的内存资源。托管堆中没有变量引用的对象,表示可以被回收了(null)。

  4、回收时间是不确定的,当程序需要新内存的时候开始执行回收。

  想更深一步研究.net垃圾回收的朋友可以点击下面链接(外国朋友写的,原理讲述很详细):http://blog.jobbole.com/31443/

posted @ 2013-08-01 21:12  DotNet_Li  阅读(679)  评论(0编辑  收藏  举报