【问题标题】:Is SOH Gen 2 and LOH Same?SOH Gen 2 和 LOH 相同吗?
【发布时间】:2018-03-18 23:54:18
【问题描述】:

我对 GC 生成有点困惑。

首先我有以下关于堆的想法。 .NET Runtime 有很多堆,但用户内存主要使用 SOH 和 LOH。

  1. 现在有 3 代 Gen 0 ,1 和 2。
  2. 此外,如果对象大小大于 85000 字节,则它会移动到 LOH。

所以我的困惑是 1. SOH是否分为三代0、1、2代? 2. LOH 不同。 要么 Gen 2 SOH 和 LOH 是一样的吗?

【问题讨论】:

  • 不一样。 Gen #2 由曾经是 gen #1 段的堆段组成,并且因为它被填满而被提升。 LOH 是大型对象的单独堆。对象永远不会“移动”到 LOH,它们会在它们足够大时在那里创建。
  • 我也有同样的想法。 System.GC.GetGeneration 方法让我很困惑。

标签: .net garbage-collection


【解决方案1】:

SOH 是为小型和短寿命对象设计的 它从第 0 代移动到第 2 代(通过 GC 生存), 不代表物体大于85k

如果一个对象大于85k,应该直接分配到LOG,那么出于性能考虑不需要移动。

【讨论】:

    猜你喜欢
    • 2018-07-27
    • 1970-01-01
    • 2022-12-01
    • 1970-01-01
    • 2011-09-08
    • 2010-10-16
    • 1970-01-01
    • 2011-10-08
    • 2021-02-25
    相关资源
    最近更新 更多