繁体   English   中英

CLR中的托管堆

[英]Managed heap in CLR

我在.NET中阅读有关CLR的信息:

当CLR加载时,堆将在SOH和LOH中进行分区。

  1. 那时启动应用程序时,CLR根据其大小将堆分配给应用程序。

  2. LOH堆具有Gen0,Gen1和Gen2区域。

这里所有A类的对象都分配给Gen0,

问题

  1. CLR如何知道应用程序将在堆中占用的大小?
  2. 假设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; } 
  1. 我相信,这是通过确定所有已声明字段的大小来确定的,并且一定要考虑其类型。 有关更多详细信息,请参见MSDN “分配内存”。
  2. 关于MSDN论文“自动内存管理”,所有最初在Gen0创建的新对象(如Brian Rasmussen在下面的注释中所指出-世代仅适用于SOH,在LOH中创建的大对象不是世代健康的),只有那些在应用程序生命期内可以生存的对象移至Gen1 但是要提到的是,如果Gen0已满,则GC将执行垃圾回收以清理Gen0 ,如果Gen0仍旧已满,则将在Gen1创建所有新对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM