写点什么

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

  • 2011-10-20
  • 本文字数:750 字

    阅读完需:约 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

2011-10-20 07:293268
用户头像

发布了 340 篇内容, 共 144.5 次阅读, 收获喜欢 13 次。

关注

评论

发布
暂无评论
发现更多内容

架构训练营第三周作业

Geek_ce484f

极客大学架构师训练营

架构师训练营第 3 周课后练习

叶纪想

极客大学架构师训练营

「架构师训练营」第三周课后练习

L

LeetCode题解:49. 字母异位词分组,数组排序,JavaScript,详细注释

Lee Chen

大前端 LeetCode

设计模式总结

天天向上

极客大学架构师训练营

架构师1期第三周总结

FG佳

极客大学架构师训练营

week-3-part2 学习总结

陈龙

架构师训练营第三周学习总结-设计模式

郎哲158

学习 极客大学架构师训练营

架构师训练营第 1 期 -Week3 - 课后练习

鲁大江

php 单例模式 极客大学架构师训练营 go单例模式

训练营第三周作业 2

仲夏

极客大学架构师训练营

架構師訓練營第 1 期 - 第 03 周總結

Panda

架構師訓練營第 1 期

架构师训练营第三周总结

月殇

极客大学架构师训练营

week-3-part1 手写单例模式

陈龙

单例

scorpion

第二讲 作业一

mm马

极客大学架构师训练营

架构师训练营第 1 期-week3

习习

spring-boot-route(四)全局异常处理

Java旅途

Java Spring Boot

架构师1期3周作业

FG佳

极客大学架构师训练营

「架构师训练营」第三周课后练习

L

第三周作业及笔记

橘子皮嚼着不脆

组合模式程序案例

天天向上

极客大学架构师训练营

架构师训练营第 1 期 -Week3 - 代码重构学习总结

鲁大江

设计模式 极客大学架构师训练营

第 3 周 作业

Pyr0man1ac

训练营第三周作业 1

仲夏

极客大学架构师训练营

手写单例模式(登记式/静态内部类)

orchid9

第三周第二题

sean

第三周笔记

orchid9

架构训练营第三周作业

Geek_ce484f

极客大学架构师训练营

架构师训练营 第三周作业

郎哲158

第三周第一题

sean

第二讲 学习总结

mm马

极客大学架构师训练营

大对象堆及.NET垃圾回收器的改进_语言 & 开发_Roopesh Shenoy_InfoQ精选文章