GC
Code
几点需要注意:
- 准确理解.Net 中GEN 0-2, 任何新分配的对象会分配进gen0, 而gen0,1,2在内存上的大小都有限制, 所以可以推出GC执行的情况有以下几种
- 新分配对象时gen0溢出,则自动GC.Collect()
- 主动GC.Collect()
- 内存压力,即gen3都要满时
2. 一次GC.Collect()大概是以下步骤
- 挂起正在调用的线程
- 取得哪些可以被收集, 询问JIT? finalize queue
- 删除重组
Code
The Destructor will be called after GC.collect(2), because we have pushed it to gen 2 in the code before.