GC 管理内存分配和回收
公共语言运行时的垃圾回收器为应用程序管理内存的分配和释放。
https://docs.microsoft.com/zh-cn/dotnet/standard/automatic-memory-management
GC内存分配原则
暂时代:因为第 0 代和第 1 代中的对象的生存期较短,因此,这些代被称为“暂时代”。
暂时段:暂时代在称为“暂时段(段:Segment)”的内存段中进行分配。 垃圾回收器获取的每个新段将成为新的暂时段,并包含在第 0 代垃圾回收中幸存的对象。 旧的暂时段将成为新的第 2 代段。
第 2 代段:保存第二代对象(大对象 以及暂时代的幸存对象)的内存段。
根据系统为 32 位还是 64 位以及它正在哪种类型的垃圾回收器(工作站或服务器 GC)上运行,暂时段的大小发生相应变化。 下表显示了暂时段的默认大小。
Segment的大小取决于系统是32位还是64位,以及它正在运行的垃圾收集器的类型,下表列出了分配时系统所使用的默认值:
GC 类型 | 32-bit | 64-bit |
---|---|---|
Workstation(工作站) GC | 16 MB | 256 MB |
Server GC(服务器) | 64 MB | 4 GB |
Server GC with > 4 logical(逻辑) CPUs | 32 MB | 2 GB |
Server GC with > 8 logical(逻辑) CPUs | 16 MB | 1 GB |
暂时段可以包含第 2 代对象。 第 2 代对象可使用多个段(在内存允许的情况下进程所需的任意数量)。
从暂时垃圾回收中释放的内存量限制为暂时段的大小。 释放的内存量与死对象占用的空间成比例。