关于.net垃圾回收的一个问题,高手进

zsuswy 2009-06-22 11:05:25
在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描述有点模糊,我自己不太肯定。是否有高手可以给个能够明确的答案?会,还是不会,不要给自己猜测的结果,最好是给一个确定的答案或者有用的参考链接,谢谢,请高手指点。
...全文
100 23 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
huhuaqiwen 2009-06-23
  • 打赏
  • 举报
回复
不好意思,我们有心无力哈!
zsuswy 2009-06-23
  • 打赏
  • 举报
回复
3楼的这个,并不是我不知道垃圾回收的机制,我只是想知道我的问题的答案,你给的那个链接我看了,对我没有什么帮助。
zsuswy 2009-06-23
  • 打赏
  • 举报
回复
还是没有人直接回答我的问题啊
ximi82878 2009-06-23
  • 打赏
  • 举报
回复
高手就是不一样,都研究底层机制。。。。我是从来没有去深究过,这就是差距啊~~顶了
birdlonger 2009-06-23
  • 打赏
  • 举报
回复
mark !
NealXX 2009-06-23
  • 打赏
  • 举报
回复
学习了
angel6709 2009-06-23
  • 打赏
  • 举报
回复
学习
zzlfe 2009-06-23
  • 打赏
  • 举报
回复
为什么要研究这个啊,托管的,改不改对你是透明的,技术不会太公开吧.
zsuswy 2009-06-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 yfqvip 的回复:]
垃圾回收器将不再需要的对象释放之后, 出现了内存碎片, 垃圾回收器扫描托管堆,找到连续的内存块,然后移动未回收的对象到更低的地址, 以得到整块的内存,同时所有的对象引用都将被调整为指向对象新的存储位置,这就象一个夯实的动作,而不是根据内存块的大小决定是否回收对象.

关于垃圾回收机制可以看这里,主要就是一个分代的概念.
http://hi.baidu.com/toughguy/blog/item/d84daef8e48be50dd9f9fdb0.html
[/Quote]
垃圾回收器扫描托管堆,找到连续的内存块

????托管堆本身不就是一个连续的内存快么?
V68V6 2009-06-23
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 zsuswy 的回复:]
之前买了一本CLR Via C# 的翻译本。现在看英文原版,不过是电子书,感觉还是爽一些。
[/Quote]

老外写东西虽然啰嗦,但是很细致,他们深怕读者理解不了他们提出的观点。不厌其烦的举例。
国内高水平的翻译者我是没看到过
翻译有信达雅一说,不少人翻得计算机连信都达不到。英语稍微好点还是直接上手原版的好。
zsuswy 2009-06-23
  • 打赏
  • 举报
回复
等我再看点资料后总结一下后再结贴吧。
zsuswy 2009-06-23
  • 打赏
  • 举报
回复
之前买了一本CLR Via C# 的翻译本。现在看英文原版,不过是电子书,感觉还是爽一些。
V68V6 2009-06-23
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 zsuswy 的回复:]
It then shifts the no-garbage objects down in memory removing all the gaps in the heap .

印度啊三的文章的地址:
http://www.codeguru.com/forum/showthread.php?t=368537
里面有很多话和CRL Via C# 里面的一模一样,不知道是谁Copy谁的。

准备结贴算了
[/Quote]

兄弟,微软的东西从来都是封装的。作为应用级的程序员很难触摸到其技术的心脏部位。
帖子还是继续晒两天吧。我就不信偌大的论坛没两个霸王扛鼎的牛人。
xxyping 2009-06-23
  • 打赏
  • 举报
回复
zsuswy 2009-06-23
  • 打赏
  • 举报
回复
It then shifts the no-garbage objects down in memory removing all the gaps in the heap .

印度啊三的文章的地址:
http://www.codeguru.com/forum/showthread.php?t=368537
里面有很多话和CRL Via C# 里面的一模一样,不知道是谁Copy谁的。

准备结贴算了
zsuswy 2009-06-23
  • 打赏
  • 举报
回复
今天看了个印度啊三写的文章,里面明确说了会压缩所有的垃圾对像所占用的空间。不过不太相信印度啊三。
柳晛 2009-06-23
  • 打赏
  • 举报
回复
学习。
binhu12332100 2009-06-23
  • 打赏
  • 举报
回复
会的,但是也是要有一定的范围,当小垃圾达到设置的阈值时,就当做大垃圾回收了……
xxyping 2009-06-23
  • 打赏
  • 举报
回复
mark!不会,等高手来解答!
zsuswy 2009-06-23
  • 打赏
  • 举报
回复
就这样结贴??
加载更多回复(3)

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧