博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
大对象堆及.NET垃圾回收器的改进
阅读量:4602 次
发布时间:2019-06-09

本文共 844 字,大约阅读时间需要 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中换取性能,需要消耗大量内存的应用程序——像繁重的图像处理程序——会面临内存碎片的问题,并且可能在使用到最大限制的内存之前就发生。

.NET在从 3.5向4.0升级的时候,已经在总体内存分配方面做出了一些改进。负责.NET Framework的垃圾回收器的资深项目经理Brandon Bay对上述问题做出评论,他说:

基于所提供的示例,执行了从3.5到4.0的升级之后,在耗尽大对象堆上的内存之前,我们可分配的内存增加了22倍。

而现在.NET 4.5看起来是在此基础之上构建的:

在.NET 4.5中,我们对大对象堆做出了两项改进。首先,我们显著改进了运行时管理空闲列表的方式,从而能够更有效地利用碎片。现在,内存分配器可以重新访问到之前版本中的分配器无法使用的内存碎片。其次,当处于模式时,运行时会在每个堆之间平衡LOH的分配。而在.NET 4.5之前,我们只能针对SOH做出平衡。在LOH分配评测中,我们发现这两种改变让结果有了实质上的改善。

你可以阅读Brandon的以获得更多细节。想要了解更多关于.NET Framework垃圾回收器的工作原理,你可以参考以及的。

查看英文原文:

转载于:https://www.cnblogs.com/shihao/archive/2011/10/21/2219946.html

你可能感兴趣的文章
MySQL数据库免安装版配置
查看>>
你必知必会的SQL面试题
查看>>
html5 Canvas绘制时钟以及绘制运动的圆
查看>>
Unity3D热更新之LuaFramework篇[05]--Lua脚本调用c#以及如何在Lua中使用Dotween
查看>>
JavaScript空判断
查看>>
洛谷 P1439 【模板】最长公共子序列(DP,LIS?)
查看>>
python timeit
查看>>
Wireless Network 并查集
查看>>
51nod 1019 逆序数
查看>>
20145202马超《JAVA》预备作业1
查看>>
云推送注意(MSDN链接)
查看>>
IDEA 生成 jar 包
查看>>
加减乘除混合版
查看>>
linux基础6-bash shell编程
查看>>
掌握这几种微服务模式助你成为更出色的工程师
查看>>
为什么很多语言选择在JVM上实现
查看>>
CSS Reset CSS Framework
查看>>
LeetCode算法扫题系列19
查看>>
nginx获取经过层层代理后的客户端真实IP(使用正则匹配)
查看>>
YII实现dropDownList 联动事件
查看>>