[英]Managed heap in CLR
我在.NET中阅读有关CLR的信息:
当CLR加载时,堆将在SOH和LOH中进行分区。
那时启动应用程序时,CLR根据其大小将堆分配给应用程序。
LOH堆具有Gen0,Gen1和Gen2区域。
这里所有A类的对象都分配给Gen0,
问题
假设CLR为Gen0区域分配了4K堆内存。 给定下面的代码,这个单线程是否有可能在Gen0上使用完整的4K内存?
collect = new List(); while(true) { collect.Add(new A()); new A(); new A(); } class A { int a = 0, b = 0; }
Gen0
创建的新对象(如Brian Rasmussen在下面的注释中所指出-世代仅适用于SOH,在LOH中创建的大对象不是世代健康的),只有那些在应用程序生命期内可以生存的对象移至Gen1
。 但是要提到的是,如果Gen0
已满,则GC将执行垃圾回收以清理Gen0
,如果Gen0
仍旧已满,则将在Gen1
创建所有新对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.