3代对象和大对象堆的区别大对象堆和GC3代对象有什么区别?LOH(大对象堆)是一个单独的堆,大对象直接分配并保留在那里直到它们被收集。对象根据其大小直接分配到LOH中,例如等于或大于85000字节。分代对象是分配到SOH(小对象堆)中的“小”对象,SOH是单个堆。SOH中的对象有一个关联的世代,表示在最大世代中它们存活了多少个集合,比如2。当世代号从0开始时,第2代中的对象可以描述为第3代,因为它有是3组最小值,即第0,1,2代。Generations有助于优化垃圾扫描。长寿命对象的世代数量随着它们在收集中的存活而增加,并且具有更高数量的世代被扫描的频率更低。这种机制导致较少的短暂对象被扫描的频率较低,因此是不必要的。生成方案应用于SOH,因为它被认为是对存在大量对象的堆的良好优化。更新据我所知,据报道LOH对象具有最大的世代,但我相信这只是默认值。它们实际上不属于任何一代,即第2代SOH对象和LOH对象不在同一个“列表”中。但是,正如@Henk所指出的,当进行第2代收集时,此时也会收集LOH对象。因此,从概念上讲,第2代和LOH之间存在关系。从.Net2.0开始,这是正确的:参见:UncoveredLargeObjectHeap从分代的角度来看,大对象属于第2代,因为它们仅在第2代中被收集时才被收集。然而,尽管收集关系很明显,它不成立的一个例子是生成压缩。收集一代的时候,也可以压缩。但是,LOH没有被压缩,所以不能说发生在第2代对象上的所有事情都发生在LOH中的对象上。以上就是C#学习教程的全部内容:第三代对象和大对象堆的区别。如果对你有用,需要进一步了解C#学习教程,希望大家多加关注——intmaxGen=GC.MaxGeneration;intobjectGen=GC.GetGeneration(bling);Assert.AreEqual(maxGen,objectGen,"Largeobjectisatmaxgeneration.");}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
