BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

垃圾回收器在CLR 4中的改进

| 作者 Abel Avram 关注 7 他的粉丝 ,译者 王瑜珩 关注 0 他的粉丝 发布于 2009年6月8日. 估计阅读时间: 4 分钟 | Google、Facebook、Pinterest、阿里、腾讯 等顶尖技术团队的上百个可供参考的架构实例!

Maoni Stephens和Andrew Pardow分别是CLR GC的开发负责人和项目经理,他们在Channel 9的一个采访中介绍了CLR 4中的后台GC功能。这个功能可以在第一个GC运行时启动另一个GC,从而提高垃圾回收的效率。

目前GC有两种工作模式:工作站模式和服务器模式,其中工作站模式还可以设置是否并发执行。

工作站模式/非并发执行-当负责分配内存空间的托管线程发现没有足够的内存可以分配时,它会在同一个线程中启动GC。GC首先会挂起所有其他的托管线程,然后清理内存,最后再恢复被挂起的托管线程,并交出控制权。

工作站模式/并发执行,也叫并发GC-工作流程与非并发GC基本相似,但不会在整个清理周期挂起其他托管线程。这些托管线程依然可以继续运行并申请内存空间,但是会有一些限制,具体限制会在后面解释。存放第0代对象的内存池也要比非并发GC的大一些,以便满足内存分配的需要。如果没有任何内存可以分配,所有其它的托管线程仍然会被挂起。

Maoni详细解释了并发GC

(并发GC)可以让你在GC运行时分配内存,但是不能分配太多-对于小对象来说最多不能超过临时段(ephemeral segment)的范围。如果我们不做临时对象的垃圾回收,临时对象所占用的空间会达到临时段的上限,这时申请内存空间的托管线程会被挂起,直到并发GC结束。

在并发GC运行的某些阶段,需要将托管线程挂起两次,这可能会花费一些时间。

服务器模式-在这种情况下,每个CPU都对应一个GC线程和内存堆。当没有内存可以分配时,负责分配内存的线程会告知相应的GC线程,该GC线程将会挂起对应CPU上的其它托管线程,然后清理内存,最后通知分配内存的线程并恢复它挂起的所有线程。

工作站非并发模式与服务器模式统称为阻塞式GC,因为GC运行时其它代码无法运行。

可以通过设置运行时配置文件来改变GC的工作模式,GC的运行频率可以通过在运行时设置LatencyMode属性来改变,可设置的值为GCLatencyMode枚举的:Batch、Interactive和LowLatency。

.NET 4.0引入了后台GC(Background GC)。并发GC只在当前段上分配内存,通常是16M。当要分配的内存超过这个限制时,所有的线程将被挂起。后台GC允许在做一次完全的垃圾回收(第0、1、2代)时,启动另一个对临时段的垃圾回收(第0和1代),这意味着对另一个内存段进行访问。Maoni解释道:

后台GC是并发GC的升级版,它使我们可以在后台GC工作时,根据需要启动另一个临时GC。与并发GC相同,后台GC只运用于完全的垃圾回收并工作在独立的GC线程中,而临时GC则是阻塞式GC,也被称为前台GC。

服务器版本的后台GC将不会出现在CLR4.0中,但可能会包含在后续版本中。目前,文档中建议:

在内存超过2GB的服务器上,可能需要在boot.ini中加入/3GB开关,以防出现明明有内存但是却报告内存溢出的问题。

你还可以使用.NET3.5提供的通知机制,在GC将要运行以及完成时得到通知,以便在多台服务器间协调工作,避免被GC干扰。

查看英文原文:The Garbage Collector Has Been Improved in CLR4

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

其实这是一个小改动 by Jeffrey Zhao

微软很久以前在讲要这么做,没有在某个SP里加上,真令人不解。

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

1 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT