网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

.NETFramework的垃圾回收器管理应用程序的内存分配和释放

C#中使用 new 运算符创建对象时,运行库都从托管堆为该对象分配内存。只要托管堆中有地址空间可用,运行库就会继续为新对象分配空间。
但是,内存不是无限大的。最终,垃圾回收器必须执行回收以释放一些内存。垃圾回收器优化引擎根据正在进行的分配情况确定执行回收的最佳时间。当垃圾回收器执行回收时,它检查托管堆中不再被应用程序使用的对象并执行必要的操作来回收它们占用的内存。
 
实例化新对象过程: 如图
.NET Framework 的垃圾回收器管理应用程序的内存分配和释放 
         首先、计算字段所需空间和对象所需空间。
                   对象所需空间包括两部分,同步块索引和类型对象指针。
         再次、分配物理内存,新对象指针指象下一个可用内存区域。
 
 
垃圾回收过程 如下图
.NET Framework 的垃圾回收器管理应用程序的内存分配和释放
 
      标记阶段:从根标记遍历到的对象。
      压缩阶段:释放没有标记的对象内存,调整存在对象的位置
 
代(Generation)是CLR垃圾收集器的一种机制,它存在的惟一目的就是提高应用程序性能。
CLR初始化时,托管堆中没有任何对象,此时添加对象是,为第0代对象。
 
CLR支持3代内存
0代对象预算容量为256k
1代对象预算容量为2M
2代对象预算容量为10M
 .NET Framework 的垃圾回收器管理应用程序的内存分配和释放
 
         第一次初始化是为第0代,当托管堆中第0代放满时,如果有新对象加入,则触发CLR
回收垃圾器把第0代中没有使用的对象清理掉,再把第0代的对象挪到第1代中,之后再把新对象添加托管堆的第0代中。
 
.NET Framework 的垃圾回收器管理应用程序的内存分配和释放

         如果第0代放满而第1代没放满,CLR回收器只把第0代中不在使用的对象清理掉,而第1代中的不变,之后再把第0代挪入第1代,把新对象添加到第0
 
         当第1代和第1代也放满时,如果再有新对象加入,则触发CLR回收垃圾器把第0代和第1代中没有使用的对象清理掉,再把第0代的对象挪到第1代中,第1代的对象挪到第2代中,之后再把新对象添加托管堆的第0代中。
依次类推

本文标题:.NETFramework的垃圾回收器管理应用程序的内存分配和释放
标题路径:http://bjjierui.cn/article/ipoohc.html

其他资讯