如果.NET使用mark&;扫描GC,为什么它将内存地址空间减半?

如果.NET使用mark&;扫描GC,为什么它将内存地址空间减半?,.net,garbage-collection,.net,Garbage Collection,根据MSDN,.NET框架。同一页还说,这意味着地址空间从4GB的32位系统中削减了一半 将可用内存减半是停止和复制垃圾收集方法的一个特点,但是.NET使用mark&sweep,它可以对整个地址空间进行操作-那么为什么.NET将地址空间减半?这是Windows,而不是.NET。32位Windows为操作系统保留了顶部2GB的地址空间,并将应用程序限制为2GB(前提是未使用/3GB标志) 请注意,实际上情况更糟。32位.NET应用程序通常会在1.2到1.6GB的RAM使用量之间引发OutOfMem

根据MSDN,.NET框架。同一页还说,这意味着地址空间从4GB的32位系统中削减了一半


将可用内存减半是停止和复制垃圾收集方法的一个特点,但是.NET使用mark&sweep,它可以对整个地址空间进行操作-那么为什么.NET将地址空间减半?

这是Windows,而不是.NET。32位Windows为操作系统保留了顶部2GB的地址空间,并将应用程序限制为2GB(前提是未使用/3GB标志)


请注意,实际上情况更糟。32位.NET应用程序通常会在1.2到1.6GB的RAM使用量之间引发
OutOfMemoryException
,即使在具有大量物理内存的64位系统上也是如此。

这是Windows,而不是.NET。32位Windows为操作系统保留了顶部2GB的地址空间,并将应用程序限制为2GB(前提是未使用/3GB标志)


请注意,实际上情况更糟。32位.NET应用程序通常会在1.2到1.6GB的RAM使用量之间开始引发
OutOfMemoryException
,即使在64位系统上,也有大量物理内存。

我认为这是Windows本身的限制。我认为这是Windows本身的限制。这些
OutOfMemoryException
s是因为可用空间的碎片,还是因为CLR本身使用的内存?@IdanArye我认为这是多种因素的混合。代际性+分区(即:SOH vs LOH)、碎片、CLR使用等都是
outofmemoryException
s,因为可用空间碎片,或者因为CLR本身使用的内存?@IdanArye我认为这是多种因素的混合。分代性+分区(即:SOH vs LOH)、分段、CLR使用等。