BT

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

大对象堆及.NET垃圾回收器的改进

| 作者 Roopesh Shenoy 关注 0 他的粉丝 ,译者 侯伯薇 关注 0 他的粉丝 发布于 2011年10月21日. 估计阅读时间: 2 分钟 | 如何结合区块链技术,帮助企业降本增效?让我们深度了解几个成功的案例。

当.NET开发者编写内存密集型(memory intensive)应用程序的时候,即便总体内存看起来非常充足,也经常会在大对象堆的分配上遇到问题,产生out-of-memory异常。微软承诺会在.NET Framework 4.5中对此做出改进,其中会有更好的LOH管理,产生的内存碎片会更少。

CLR会管理两种独立的堆并对其进行分配,小对象堆(small object heap,SOH)和大对象堆(large object heap,LOH)。所有大于85,000 byte的内存分配都会在LOH上进行。你可以阅读这些文章,以进一步了解这两种堆之间的区别。 为了在LOH中换取性能,需要消耗大量内存的应用程序——像繁重的图像处理程序——会面临内存碎片的问题,并且可能在使用到最大限制的内存之前就发生OutOfMemory异常

.NET在从 3.5向4.0升级的时候,已经在总体内存分配方面做出了一些改进。负责.NET Framework的垃圾回收器的资深项目经理Brandon Bay对上述问题做出评论,他说:

基于所提供的示例,执行了从3.5到4.0的升级之后,在耗尽大对象堆上的内存之前,我们可分配的内存增加了22倍。

而现在.NET 4.5看起来是在此基础之上构建的:

在.NET 4.5中,我们对大对象堆做出了两项改进。首先,我们显著改进了运行时管理空闲列表的方式,从而能够更有效地利用碎片。现在,内存分配器可以重新访问到之前版本中的分配器无法使用的内存碎片。其次,当处于服务器垃圾回收(server GC)模式时,运行时会在每个堆之间平衡LOH的分配。而在.NET 4.5之前,我们只能针对SOH做出平衡。在LOH分配评测中,我们发现这两种改变让结果有了实质上的改善。

你可以阅读Brandon的完整文章以获得更多细节。想要了解更多关于.NET Framework垃圾回收器的工作原理,你可以参考MSDN文档以及Andrew Hunter这篇文章

查看英文原文:Large Object Heap And .NET GC Improvements

评价本文

专业度
风格

您好,朋友!

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

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的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通知我

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

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

讨论

深度内容

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


找回密码....

Follow

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

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

Like

内容自由定制

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

Notifications

获取更新

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

BT