写点什么

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

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

关注

评论

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

Go语言入门11—接口

良猿

Go golang 后端 11月月更

Nginx配置中root和alias分不清?本文3分钟帮你解惑!

wljslmz

nginx 服务器 root 11月月更 alias

融云通信云服务,助力医疗招聘平台构建行业护城河

融云 RongCloud

通信 医疗 融云

发布自己的第一个npm包

格斗家不爱在外太空沉思

npm nodejs 11月月更

Vue基础知识整理【建议收藏】

何极光

Vue 基础

JavaScript刷LeetCode拿offer-双指针技巧

Geek_07a724

JavaScript LeetCode

基于 Grafana LGTM 可观测性平台的快速构建

Grafana 爱好者

可观测性 Observability

一个非常常见的问题:var、let和const

肥晨

11月月更 js6 js基础

前端工程师leetcode算法面试必备-二分搜索算法(中)

js2030code

JavaScript LeetCode

云原生生态 我们选择了哪些

Rayzh

Docker Kubernetes, 云原生, eBPF

Java | IO流介绍

陌上

Java 编程 11月月更

JavaScript刷LeetCode拿offer-双指针技巧Medium篇

Geek_07a724

JavaScript LeetCode

透过关键基础设施安全事件谈SBOM

安势信息

Gartner SCA 软件物料清单 SBOM 清源CleanSource SCA

如何写成高性能的代码(三):巧用稀疏矩阵节省内存占用

葡萄城技术团队

前端 稀疏矩阵

TOGAF企业架构框架4-内容框架

Marvin

架构 TOGAF 企业架构框架 内容框架

TOGAF架构框架3-ADM架构开发技术

Marvin

架构 TOGAF ADM架构开发方法

前端工程师leetcode算法面试必备-二分搜索算法(下)

js2030code

JavaScript LeetCode

软件测试面试真题 | 讲讲 OSI 七层模型,每层模型具体干嘛的?

测试人

真正的高效能RPC框架Focus

dinstone

json RPC 高性能 protobuf 跨语言

前端工程师leetcode算法面试必备-二分搜索算法(上)

js2030code

JavaScript LeetCode

云渲染是CG的最后一道工序,四个特性让你的渲染更高效

Finovy Cloud

云渲染 云渲染农场

FFmpeg-ffplay播放器分析(1).md

Changing Lin

音视频 ffmpeg 安卓

Baklib经验分享 | 一些搭建帮助中心的攻略

Baklib

帮助中心

物联网数据分析(上篇)——业务系统架构类

阿里云AIoT

阿里云 数据分析 物联网 业务架构 数据存储

云栖大会,一场边缘云计算的「超前瞻」之约

阿里云CloudImagine

云栖大会 边缘云

BNBDao三三复制公排dapp系统开发

开发微hkkf5566

如何构建并提高自己的核心竞争力?

老张

核心竞争力

JavaScript刷LeetCode拿offer-滑动窗口

Geek_07a724

JavaScript LeetCode

使用Vmware创建Centos7虚拟机(安装和配置网络环境、xshell连接、防火墙、yum仓库、磁盘挂载、重启命令)

A-刘晨阳

Linux 运维 vmware 11月月更

Linux常用基础命令(巨全)

A-刘晨阳

Linux 运维 11月月更 基础命令

Baklib知识分享|企业知识管理难,该如何解决?

Baklib

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