我无法想象所有线程都必须获取一个锁才能分配内存。那么有多个Gen 0堆吗?是否有一个在线程中分区?
答案 0 :(得分:7)
来自本文:Jeffrey Richter的Garbage Collection Part 2: Automatic Memory Management in the Microsoft .NET Framework
无同步分配 在多处理器系统上,每个线程使用一个竞技场将托管堆的第0代拆分为多个内存竞技场。这允许多个线程同时进行分配,因此不需要对堆进行独占访问。
可伸缩集合 在运行服务器版本的执行引擎(MSCorSvr.dll)的多处理器系统上,托管堆分为几个部分,每个CPU一个部分。启动集合时,收集器每个CPU有一个线程;所有线程同时收集自己的部分。执行引擎的工作站版本(MSCorWks.dll)不支持此功能。
还有很多其他事情要发生,请查看“多线程应用程序的性能”标题。