.NET垃圾回收模式与延迟模式详解
1. 服务器非并发垃圾回收(Server Non-Concurrent)
从 .NET 诞生到 .NET Framework 4.5,服务器非并发垃圾回收一直是服务器(主要是 Web)应用程序的默认模式。它实际上是之前提到的工作站非并发模式的简单扩展,所有的垃圾回收(GC)都是阻塞式的,无论回收的是哪一代对象。从内存管理角度看,默认情况下,托管堆的数量与逻辑 CPU 核心数相同。
服务器非并发 GC 模式具有以下特点:
- 专用线程 :有专门用于 GC 的额外线程,默认数量与托管堆数量相同,称为服务器 GC 线程。大多数时候这些线程处于挂起状态,等待工作。每个线程负责处理对应的托管堆。
- 非并发回收 :所有回收都是非并发的。由于多个 GC 线程并行回收,引入的暂停时间比工作站模式下相同堆大小的情况更短。并且由于是“停止世界”式的回收,还可以进行堆压缩。
- 并行标记 :多个 GC 线程并行进行标记,加快阻塞阶段。还使用标记窃取技术平衡多个线程之间的标记工作。因为包含存活外向引用的对象分布不同,堆的标记工作可能不均衡,所以 GC 线程有时会相互“窃取”要访问的对象批次。
在 .NET Framework 4.6+ 和 .NET Core 中,增加了 GCHeapCount 配置,用于指定 GC 使用的线程和托管堆数量。可以通过 COMPlus_GCHeapCount 环境变量或 XML/JSON 配置文件设置,示例代码如下:
超级会员免费看
订阅专栏 解锁全文
68

被折叠的 条评论
为什么被折叠?



