首页 相关文章 .Net 垃圾回收和大对象处理 内存碎片整理

.Net 垃圾回收和大对象处理 内存碎片整理

.Net 垃圾回收和大对象处理 内存碎片整理

CLR垃圾回收器根据所占空间大小划分对象。大对象和小对象的处理方式有很大区别。比如内存碎片整理 在内存中移动大对象的成本是昂贵的,让我们研究一下垃圾回收器是如何处理大对象的,大对象对程序性能有哪些潜在的影响。

大对象堆和垃圾回收

在.Net 1.0和2.0中,如果一个对象的大小超过85000byte,就认为这是一个大对象。这个数字是根据性能优化的经验得到的。当一个对象申请内存大小达到这个阀值,它就会被分配到大对象堆上。这意味着什么呢?要理解这个,我们需要理解.Net垃圾回收机制。

如大多人所知道的,.Net GC是按照代来回收的。程序中的对象共有3代,0代、1代和2代,0代是最年轻的对象,2代对象存活的时间最长。GC按代回收垃圾也是出于性能考虑 的;通常的对象都会在0代是被回收。例如,在一个asp.net程序中,和每一个请求相关的对象都应该在请求结束时回收掉。而没有被回收的对象会成为1代 对象;也就是说1代对象是常驻内存对象和马上消亡对象之间的一个缓冲区。

从代的角度看,大对象属于2代对象,因为只有在2代回收时才会处理大对象。当某...[ 查看全文 ]

2016-03-31 标签:

.Net 垃圾回收和大对象处理 内存碎片整理的相关文章

手机页面
收藏网站 回到头部