【发布时间】:2018-03-18 23:54:18
【问题描述】:
我对 GC 生成有点困惑。
首先我有以下关于堆的想法。 .NET Runtime 有很多堆,但用户内存主要使用 SOH 和 LOH。
- 现在有 3 代 Gen 0 ,1 和 2。
- 此外,如果对象大小大于 85000 字节,则它会移动到 LOH。
所以我的困惑是 1. SOH是否分为三代0、1、2代? 2. LOH 不同。 要么 Gen 2 SOH 和 LOH 是一样的吗?
【问题讨论】:
-
不一样。 Gen #2 由曾经是 gen #1 段的堆段组成,并且因为它被填满而被提升。 LOH 是大型对象的单独堆。对象永远不会“移动”到 LOH,它们会在它们足够大时在那里创建。
-
我也有同样的想法。 System.GC.GetGeneration 方法让我很困惑。