2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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

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

关注

评论

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

揭开链表的真面目

Java旅途

Java 数据结构 链表

Week12

一叶知秋

管理时间还是挥霍时间?

钰湚—付晓岩

学习 时间管理 工作体会 工作哲学

Jenkins持续集成「编译打包、代码检查、单元测试、环境部署、软件测试​」

清菡软件测试

jenkins

C语言内存泄露很严重,如何应对?

华为云开发者联盟

c 内存泄露 内存 代码 函数

产品经理的架构思维

吴世亮

架构 产品经理 电商

Keepass+Synology 打造私人密码管理器

zj坚果

Python 到底是强类型语言,还是弱类型语言?

Python猫

Java c++ Python 编程

week 12 作业

Geek_2e7dd7

性能相关 磁盘I/O子系统

Linuxer

数字货币交易平台搭建,去中心化交易所开发方案

13530558032

USDT承兑商软件开发,区块链支付系统源码搭建

13530558032

DockerHub 镜像仓库的使用

哈喽沃德先生

Docker 容器 微服务 镜像

合约跟单软件开发,合约跟单交易所系统开发搭建

13530558032

新时代背景下的Java语法特性

九叔(高翔龙)

Java java 14 java 14 新特性 Java 分布式

MySQL复杂where条件分析

程序员历小冰

MySQL

Golang写算法

卒迹

算法 Go 语言

oeasy教您玩转linux-010110内容回顾

o

数字资产钱包开发,深圳区块链理财钱包服务商

13530558032

在面试中成长

escray

学习 面试

面试必备知识点:悲观锁和乐观锁的那些事儿

鄙人薛某

面试 乐观锁 悲观锁 CAS 并发控制

1. 不吹不擂,第一篇就能提升你对Bean Validation数据校验的认知

YourBatman

Hibernate-Validator Bean Validation 数据校验 JSR380

week 12 学习总结

Geek_2e7dd7

拖延症竟然是自己给自己的一种奖励?如何干掉它?

非著名程序员

个人成长 拖延症 番茄土豆工作法

SpreadJS 纯前端表格控件应用案例:表格数据管理平台

葡萄城技术团队

你也许还不懂静态方法和实例方法

架构师修行之路

自己做的 PPT 总被批「缺少干货」?试试先回答这三个问题

Tony Wu

效率工具 方法论 PPT

甲方日常4

句子

工作 随笔杂谈 日常

java安全编码指南之:对象构建

程序那些事

Java 安全 安全编码指南 对象构建

文件系统

Linuxer

面试是一张窄窄的船票

escray

学习 面试

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