名词

垃圾收集目标

  • ephemeral GC

发生在Gen 0 和Gen 1 的垃圾收集

  • Full GC

发生Gen 2 及以上的Gen与LOH的垃圾收集

垃圾收集模式

  • 工作站模式

GC直接发生在内存分配的线程(也是当前的工作托管线程)上

  • 服务器模式

每个CPU核都有一个自己独立的GC线程与托管堆

垃圾收集的并发需求

  • 并发的意思是background GC在进行垃圾收集时,其它托管线程是否可以同时工作(包括分配内存)
  • 仅需为Full GC考虑并发,因为ephemeral GC的时间短、代价小,可一直为阻塞模式。
  • .NET4后的并发可让background GC与ephemeral GC同时工作

配置

<configuration>
<runtime>
<gcConcurrent enabled="true"/>
<gcServer enabled="true"/>
</runtime>
</configuration>

继承与垃圾回收模型

using System;

namespace 继承与垃圾回收模型 {
class Base : IDisposable {
private bool _disposed; protected virtual void Dispose(bool disposing) {
Console.WriteLine(string.Format("Base.Dispose({0})", disposing));
if (!_disposed) {
if (disposing) {
#region 清理Base自己的托管资源
#endregion
}
#region 清理Base自己的非托管资源
#endregion
}
_disposed = true;
} public void Base干活() {
if (_disposed) {
throw new ObjectDisposedException("Base");
}
} ~Base() {
Console.WriteLine("~Base()");
Dispose(false);
} public void Dispose() {
Console.WriteLine("");
Dispose(true);
GC.SuppressFinalize(this);
}
} class Child : Base {
private bool _disposed; protected override void Dispose(bool disposing) {
Console.WriteLine(string.Format("Child.Dispose({0})", disposing));
if (!_disposed) {
try {
if (disposing) {
#region 清理Child自己的托管资源
#endregion
}
#region 清理Child自己的非托管资源
#endregion
_disposed = true;
}
finally {
base.Dispose(disposing);
}
}
} public void Child干活() {
if (_disposed) {
throw new ObjectDisposedException("爸爸");
}
} //“可以”为Child写析构方法,但没必要。内部的“Dispose(false)”也没必要
~Child() {
Console.WriteLine("~Child()");
}
} class 回收示例 {
/// <summary>
/// 输出:
/// -----以下为手动回收
/// Child.Dispose(True)
/// Base.Dispose(True)
///
/// -----以下为自动回收
/// ~Child()
/// ~Base()
/// Child.Dispose(False)
/// Base.Dispose(False)
/// </summary>
/// <param name="args"></param>
static void Main(string[] args) {
Console.WriteLine("-----以下为手动回收");
var 手动 = new Child();
手动.Dispose(); Console.WriteLine("/n/n-----以下为自动回收");
var 自动 = new Child();
GC.Collect();
}
}
}

  

资料

实现 Dispose 方法

垃圾回收通知

.Net Discovery 系列之七--深入理解.Net垃圾收集机制(拾贝篇) 发布在新年第一秒

.Net Discovery 系列之四--深入理解.Net垃圾收集机制(下)

So, what’s new in the CLR 4.0 GC?      
    .NET 4/4.5里新的垃圾收集机制      
    对象代(Generation)与GC      
    Using GC Efficiently – Part 2      
    CLR探索系列:Server and Workstation Garbage Collection探索(垃圾回收系列)

最新文章

  1. Xml序列化去掉命名空间,去掉申明
  2. 孙鑫MFC学习笔记4:MFC画图
  3. 为python-sproto添加map支持
  4. 来自 CORS 预检通道的 CORS 头 &#39;Access-Control-Allow-Headers&#39; 的令牌 &#39;appkey&#39; 无效)。
  5. C标准头文件&lt;assert.h&gt;
  6. 要“jquery”ScriptResourceMapping。请添加一个名为 jquery (区分大小写)的 ScriptResourceMapping。”的解决办法。
  7. 使用 PHP 限制下载速度
  8. 使用oracle写if判断
  9. 高难度(3)RenderScript
  10. java WEB Response重定向和缓存控制
  11. Unix文化--RTFM
  12. 基于Vue.js的大型报告页项目实现过程及问题总结(二)
  13. cdn和反向代理
  14. 纯CSS编写汉克狗
  15. requests(二): json请求中固定键名顺序&amp;消除键和值之间的空格
  16. Linux:安装mysql
  17. P2048 [NOI2010]超级钢琴 (RMQ,堆)
  18. Steps to install Docker on Manjaro 16.10--转
  19. arc093F Dark Horse
  20. ReactNative-闪退日志集成

热门文章

  1. Lucene.Net 2.3.1开发介绍 —— 简介
  2. 启动网页时候自己主动载入servlet假设不使用strus最经常使用的两种方式
  3. js 常用正则表达式分析详解
  4. 同一个页面里的JS怎样获取jsp从别的页面获取的参数
  5. SilkTest Q&amp;A 4
  6. 蜘蛛侠天堂,打死我mac键盘
  7. C / C++算法学习笔记(7)-双向冒泡
  8. SQL查询语句联系
  9. 30分钟快速掌握AngularJs
  10. 2014年百度之星程序设计大赛 - 资格赛 第二题 Disk Schedule