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

Jon*_*len 7 .net clr

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

Las*_*olt 7

本文内容:垃圾收集第2部分: Jeffrey Richter 在Microsoft .NET Framework中的自动内存管理

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

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

还有很多其他事情要发生,请寻找"多线程应用程序的性能"标题.