QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

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

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

关注

评论

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

敏捷实践 | 分不清Kanban和看板的只剩你了……

LigaAI

Scrum Kanban 敏捷开发 看板

LT浏览器——响应式网站测试利器

FunTester

性能测试 自动化测试 web测试 兼容性测试 测试报告

面试官:你说说一条更新SQL的执行过程?

艾小仙

手撸二叉树之单值二叉树

HelloWorld杰少

数据结构与算法 8月日更

AI+云原生,把卫星遥感虐的死去活来

华为云开发者联盟

AI 容器 云原生 k8s 遥感影像

Apache HBase MTTR 优化实践:减少恢复时长

华为云开发者联盟

Apache hadoop zookeeper HBase MapReduce服务

分片上传Minio存储服务的问题集锦[推荐收藏]

liuzhen007

8月日更

【Flutter 专题】64 图解基本 TextField 文本输入框 (一)

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 8月日更

JVM集合之类加载子系统

阿Q说代码

JVM 加载 类加载器 双亲委派 8月日更

【LeetCode】合并两个排序的链表Java题解

Albert

算法 LeetCode 8月日更

Ansible 管理 Windows 机器配置过程。

耳东@Erdong

windows ansible 8月日更

架构实战营第一期 -- 模块五作业

clay

架构实战营

iOS开发:Xcode自带的模拟器常用快捷键的使用

三掌柜

8月日更 8月

老用户运营从哪里切入?

boshi

运营 私域运营

Python代码阅读(第12篇):初始化二维数组

Felix

Python 编程 Code Programing 阅读代码

netty系列之:自定义编码和解码器要注意的问题

程序那些事

Java Netty 程序那些事

接口测试--apipost如何自定义变量

与风逐梦

软件测试 接口测试

【设计模式】状态模式

Andy阿辉

C# 编程 后端 设计模式 8月日更

聊一聊这些年看过的动漫

箭上有毒

8月日更

vue入门:http客户端axios

小鲍侃java

8月日更

Java筑基 - JNI到底是个啥

码农参上

Java jni 8月日更

低代码:时代的选择

华为云开发者联盟

云计算 软件开发 低代码 硬件 IT系统

2分钟玩转中文接口测试工具-ApiPost

CodeNongXiaoW

项目管理 大前端 测试 后端

JS对象拷贝:深拷贝和浅拷贝

华为云开发者联盟

js 对象 对象拷贝 深拷贝 浅拷贝

模块五作业

老实人Honey

架构训练营

三分钟快速了解 Cglib 动态代理

4ye

Java 后端 cglib 代理模式 8月日更

基于AOP和HashMap原理学习,开发Mysql分库分表路由组件!

小傅哥

小傅哥 hashmap 分库分表 aop 数据散列

有效管理数据安全性—— Pulsar Schema 管理

Apache Pulsar

Apache Pulsar StreamNative schema

在线文字图标logo文章封面图生成工具

入门小站

工具

spring 大事务

Rubble

8月日更

Compose 中的文字

Changing Lin

8月日更

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