CLR:所有线程如何共享第0代?

时间:2011-01-20 09:13:55

标签: .net clr

我无法想象所有线程都必须获取一个锁才能分配内存。那么有多个Gen 0堆吗?是否有一个在线程中分区?

1 个答案:

答案 0 :(得分:7)

来自本文:Jeffrey Richter的Garbage Collection Part 2: Automatic Memory Management in the Microsoft .NET Framework

无同步分配 在多处理器系统上,每个线程使用一个竞技场将托管堆的第0代拆分为多个内存竞技场。这允许多个线程同时进行分配,因此不需要对堆进行独占访问。

可伸缩集合 在运行服务器版本的执行引擎(MSCorSvr.dll)的多处理器系统上,托管堆分为几个部分,每个CPU一个部分。启动集合时,收集器每个CPU有一个线程;所有线程同时收集自己的部分。执行引擎的工作站版本(MSCorWks.dll)不支持此功能。

还有很多其他事情要发生,请查看“多线程应用程序的性能”标题。