关于.net垃圾回收的一个问题,高手进
在CLR Via C#一书中,Jeffrey Richter有这样的一句描述,下面是原话:
If small blocks are found, the garbage collector leaves the blocks alone. If large free contiguous blocks are found, however, the garbage collector shifts the nongarbage objects down in memory
to compact the heap.
大概的意思就是说,如果有小块的垃圾内存,那么就不管它。如果有大块的连续内存,那么就移动非垃圾对象来压缩托管堆。我的问题是,如果又有小块的垃圾内存,又有大块的连续垃圾内存,那么在压缩托管堆时,是否也会把那些小块的垃圾内存压缩掉?
我自己的理解是应该会,否则如果不收回这些小块的内存的话,还是会产生一些内存碎片的,但是Jeffrey Richter描述有点模糊,我自己不太肯定。是否有高手可以给个能够明确的答案?会,还是不会,不要给自己猜测的结果,最好是给一个确定的答案或者有用的参考链接,谢谢,请高手指点。