黑马程序员技术交流社区
标题:
如何理解.net中的垃圾回收机制?
[打印本页]
作者:
不是炎亚纶
时间:
2013-11-11 17:01
标题:
如何理解.net中的垃圾回收机制?
垃圾回收机制是怎么工作的 ?
作者:
Goes_By
时间:
2013-11-11 17:50
NET中的垃圾回收机制是引用程序对内存的回收和释放。当每次用new关键字创建一个对象时,运行库都要从托管堆中为其分配内存,因为空间是有限的,最终垃圾回收机制是要回收不用的内存的。已释放内存,重新使用。
作者:
轮回
时间:
2013-11-12 09:49
在.NET Framework中,内存中的资源(即所有二进制信息的集合)分为"托管资源"和"非托管资源".托管资源必须接受.NET Framework的CLR(通用语言运行时)的管理(诸如内存类型安全性检查),而非托管资源则不必接受.NET Framework的CLR管理. (了解更多区别请参阅.NET Framework或C#的高级编程资料)
托管资源在.NET Framework中又分别存放在两种地方: "堆栈"和"托管堆"(以下简称"堆");规则是,所有的值类型(包括引用和对象实例)和引用类型的引用都存放在"堆栈"中,而所有引用所代表的对象实例都保存在堆中。
以上的是我在博客园看到的文章的开头,将这篇文章分享给你,希望对你有帮助
http://www.cnblogs.com/anorthwolf/archive/2009/12/07/1618744.html
作者:
Sayme
时间:
2013-11-12 09:55
知识有限 只能把知道的告诉你
什么叫资源回收: 我们理解为 所有的东西都是占用内存的,有些方法或者变量我们用完了需要去释放掉(也就是在内存中把他清空) 这种机制叫资源回收
目前已知C# 自动资源回收用到的方法是 using()
作者:
一席倾城
时间:
2013-11-13 20:35
圾回收器是用来管理应用程序的内存分配和释放的。在垃圾回收器出现以前,程序员在使用内存时需要向系统申请内存空间。有些语言,例如Visual Basic,可以自动完成向系统申请内存空间的工作。但是在诸如Visual C++的语言中要求程序员在程序代码中申请内存空间。如果程序员在使用了内存之后忘了释放内存,则会引起内存泄漏。但是有了垃圾回收器,程序员就不必关心内存中对象在离开生存期后是否被释放的问题。当一个应用程序在运行的时候,垃圾回收器设置了一个托管堆。托管堆和C语言中的堆向类似,但是程序员不需要从托管堆中释放对象,并且在托管堆中对象的存放是连续的。
每次当开发人员使用 new 运算符创建对象时,运行库都从托管堆为该对象分配内存。新创建的对象被放在上次创建的对象之后。垃圾回收器保存了一个指针,该指针总是指向托管堆中最后一个对象之后的内存空间。当新的对象被产生时,运行库就知道应该将新的对象放在内存的什么地方。同时开发人员应该将相同类型的对象放在一起。例如当开发人员希望向数据库写入数据的时侯,首先需要创建一个连接对象,然后是Command对象,最后是DataSet对象。如果这些对象放在托管堆相邻的区域内,存取它们就非常快。
当垃圾回收器的指针指向托管堆以外的内存空间时,就需要回收内存中的垃圾了。在这个过程中,垃圾回收器首先假设在托管堆中所有的对象都需要被回收。然后它在托管堆中寻找被根对象引用的对象(根对象就是全局,静态或处于活动中的局部变量以及寄存器指向的对象),找到后将它们加入一个有效对象的列表中,并在已经搜索过的对象中寻找是否有对象被新加入的有效对象引用。直到垃圾回收器检查完所有的对象后,就有一份根对象和根对象直接或间接引用了的对象的列表,而其它没有在表中的对象就被从内存中回收。
作者:
一席倾城
时间:
2013-11-13 20:37
一席倾城 发表于 2013-11-13 20:35
圾回收器是用来管理应用程序的内存分配和释放的。在垃圾回收器出现以前,程序员在使用内存时需要向系统申请 ...
想了解基本的推荐看下C#编程基础,深入的可以看下C#高级编程想,写的特别好
作者:
再起来
时间:
2013-11-19 15:16
垃圾收集器会自动进行管理。当一个托管资源对象没有引用指向时,垃圾回收器会自动调用GC.collect释放该对象。c/c++中由程序员进行对象的回收像学校食堂中由学生收盘子。.net中由GC进行垃圾回收像场馆中店员去回收盘子。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2