C#学习笔记之垃圾回收机制
2013-06-05 11:13
357 查看
垃圾回收器的基本假定:
1:一个对象越新,那么这个对象的生命周期就越短。也就是说最近分配内存空间的对象最有可能被释放。
2:一个对象越老,那么这个对象的生命周期就越长。也就是说经过几轮垃圾回收后,对象仍然存在,搜索它时就需要进行大量的工作,却只能释放很小的一部分空间。所以有可能还没有搜索到这个对象的时候,我们已经获得了需要的内存了。
3:新对象之间通常更可能和新对象之间存在引用关系,也就是说同时被分配内存的对象通常是同时使用,将它们彼此相连有助于提高缓存性能和回收效率。
4:压缩堆得一部分要比压缩整个堆要快。
C#中的回收器是分代的垃圾回收器(Generational Garbage Collector),它将分配的对象分为3个类别或代。(可用GC.GetGeneration方法返回任意作为参数的对象当前所处的代)。最近被分配内存的对象被放置于第0代,因为第0代很小,小到足以放进处理器的二级缓存,所以它能够提供对对象的快速存取。经过一轮垃圾回收后,仍然保留的第0代的对象被移进第1代中,再经过一轮垃圾内存回收后,仍然保留在第1代的对象则被移进第2代中,第2代中保安了生存期较长的对象。
在C#中值类型是在堆中分配内存,它们有自身的生命周期,所以不用对它们进行管理,会自动分配和释放。而引用类型是在堆中分配内存的,所以它的分配和释放就需要像回收机制来管理。C#为一个对象分配内存时,托管堆可以立即返回新对象所需的内存,因为托管堆类似于简单的字节数组,有一个指向第一个可用内存空间的指针,指针像游标一样向后移动,一段段内存就分配给正在运行的程序的对象,在不需要太多垃圾回收的小程序,托管堆性能优于传统的堆。
当第0代没有可以分配的有效内存时,就出发了第0代中的一轮垃圾回收,它讲删除那些不再被引用的对象,并将当前正在使用的对象移至第1代。而当第0代垃圾回收后依然不能请求到充足的内存时,就启动第1代垃圾回收。如果对各代都进行了垃圾回收后仍没有可用的内存,就会引发一个OutOfMemoryException异常。
1:一个对象越新,那么这个对象的生命周期就越短。也就是说最近分配内存空间的对象最有可能被释放。
2:一个对象越老,那么这个对象的生命周期就越长。也就是说经过几轮垃圾回收后,对象仍然存在,搜索它时就需要进行大量的工作,却只能释放很小的一部分空间。所以有可能还没有搜索到这个对象的时候,我们已经获得了需要的内存了。
3:新对象之间通常更可能和新对象之间存在引用关系,也就是说同时被分配内存的对象通常是同时使用,将它们彼此相连有助于提高缓存性能和回收效率。
4:压缩堆得一部分要比压缩整个堆要快。
C#中的回收器是分代的垃圾回收器(Generational Garbage Collector),它将分配的对象分为3个类别或代。(可用GC.GetGeneration方法返回任意作为参数的对象当前所处的代)。最近被分配内存的对象被放置于第0代,因为第0代很小,小到足以放进处理器的二级缓存,所以它能够提供对对象的快速存取。经过一轮垃圾回收后,仍然保留的第0代的对象被移进第1代中,再经过一轮垃圾内存回收后,仍然保留在第1代的对象则被移进第2代中,第2代中保安了生存期较长的对象。
在C#中值类型是在堆中分配内存,它们有自身的生命周期,所以不用对它们进行管理,会自动分配和释放。而引用类型是在堆中分配内存的,所以它的分配和释放就需要像回收机制来管理。C#为一个对象分配内存时,托管堆可以立即返回新对象所需的内存,因为托管堆类似于简单的字节数组,有一个指向第一个可用内存空间的指针,指针像游标一样向后移动,一段段内存就分配给正在运行的程序的对象,在不需要太多垃圾回收的小程序,托管堆性能优于传统的堆。
当第0代没有可以分配的有效内存时,就出发了第0代中的一轮垃圾回收,它讲删除那些不再被引用的对象,并将当前正在使用的对象移至第1代。而当第0代垃圾回收后依然不能请求到充足的内存时,就启动第1代垃圾回收。如果对各代都进行了垃圾回收后仍没有可用的内存,就会引发一个OutOfMemoryException异常。
相关文章推荐
- [C#]C#学习笔记-垃圾回收机制
- c#学习笔记-.net垃圾回收机制
- C#学习笔记-垃圾回收机制
- C#学习笔记12-GC的工作原理基础和垃圾回收机制
- JavaWeb学习笔记—JVM的垃圾回收机制(转载)
- Java 学习笔记 (13) - 基本内存分析 和 垃圾回收机制
- JVM垃圾回收机制学习笔记
- 《C#入门到精通》学习笔记 -- 垃圾回收机制
- Java学习笔记之垃圾回收机制
- java学习笔记4_垃圾回收机制
- node学习笔记--- v8的垃圾回收机制
- Java之学习笔记(24)-----------垃圾回收机制
- java 垃圾回收机制(GC)学习笔记
- JAVA学习笔记9——垃圾回收机制+构造方法+重载
- Java补完之垃圾回收GC机制学习笔记
- Linux 邻居协议 学习笔记 之三 通用邻居项的垃圾回收机制
- java垃圾回收机制(学习总结)
- 深入了解C#系列:谈谈C#中垃圾回收与内存管理机制
- .net垃圾回收学习[C#中的Stack和heap][续3]
- nodejs的v8引擎垃圾回收机制学习