? 名詞
? ? 垃圾收集目標
- ? ? ? 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探索(垃圾回收系列)
? ? ??