写点什么

大对象堆及.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:293095
用户头像

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

关注

评论

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

传统软件如何SaaS化改造,10个问答带你掌握最优解

华为云开发者联盟

开发 华为云 华为云开发者联盟 企业号 6 月 PK 榜

“大模型+小模型”新纪元开启,AI基础软件定义AI未来

九章云极DataCanvas

大模型热潮来袭,AI基础软件深度赋能金融行业数智化升级

九章云极DataCanvas

KW 新闻 | KaiwuDB 受邀亮相 IOTE 2023 第十九届国际物联网展

KaiwuDB

工业物联网 KaiwuDB IOTE

扬帆启航丨九科信息亮相2023全球数字经济大会(GDEC)新加坡分会场

九科Ninetech

执行器-Query 执行详解

KaiwuDB

KaiwuDB Query执行

政务云建设提速,天翼云夯实智慧政务数字底座

天翼云开发者社区

云计算 大数据

AI在线问题回答输出

xushuanglu

AI

社交app源码技术屏幕的两大实用功能

山东布谷科技

App 软件开发 社交娱乐 源码实现

KW 新闻 | KaiwuDB 发布智慧矿山解决方案

KaiwuDB

智慧矿山 KaiwuDB 世界智能大会

人民日报:天翼云持续拓展云网基础设施覆盖广度和深度

天翼云开发者社区

云计算

如何修复 Mac 上的“未找到匹配的密钥交换方法”

背包客

macos SSH Mac 软件 mac电脑 macOS 13 Ventura

低代码崛起:让程序员饭碗不保?人工智能或成“帮凶”

加入高科技仿生人

人工智能 低代码 数智化

QCon高分演讲:火山引擎容器技术在边缘计算场景下的应用实践与探索

火山引擎边缘云

边缘计算 容器技术 实践 火山引擎边缘云

开源共建下一代智能终端操作系统根社区 OpenHarmony携手伙伴聚力前行

科技汇

Last Week in Milvus

Zilliz

非结构化数据 Milvus Zilliz 向量数据库 zillizcloud

瓴羊Quick BI:可视化大屏让数据呈现更直观

夜雨微澜

一文走进 SQL 编译-语义解析

KaiwuDB

KaiwuDB SQL编译

瓴羊Quick BI:轻松实现数据可视化大屏

对不起该用户已成仙‖

翻车了,被读者找出 BUG

捉虫大师

Go 性能优化

​“前端已死”甚嚣尘上,全栈工程师卷到起飞

引迈信息

前端 低代码 全栈 JNPF

CloudOps自动化运维套件助力企业更好上云、用云、管云

阿里云弹性计算

云计算 大数据 阿里云 物联网

万字长文解析,领域驱动设计(DDD)落地设计

codebee

Postman Runner 中的参数自增技巧

Liam

Java Postman API 接口开发 接口工具

开发一次、运行多端:Weex与小程序容器的卓越优势解析

FinFish

Weex 跨端开发 小程序容器 跨端框架 跨端技术

如何在 Jupyter Notebook 用一行代码启动 Milvus?

Zilliz

Jupyter Notebook 非结构化数据 Colab AIGC 向量数据库

Java获取本机IP

Geek_7ubdnf

揭秘阿里云 Flink 智能诊断利器——Flink Job Advisor

Apache Flink

大数据 flink 实时计算

KW 喜报 | KaiwuDB 斩获 2023 数博会“优秀科技成果”奖

KaiwuDB

KaiwuDB 离散制造业解决方案 2023数博会

蚂蚁集团变更管控平台 AlterShield 正式开源

TRaaS

GitHub 开源 蚂蚁集团 蚂蚁技术风险TRaaS

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