代的概念,有三代,0,1,2
- G0 大小为512K 动态调整
- G1 大小为2M 动态调整
- G2 大小为10M 动态调整
- G0 小对象(Size<85,000)
- G1 在GC中型材下来的G0对象
- G2 大对象(Size>85000) 或者是在GC中幸存的G1对象
Console.WriteLine(GC.MaxGeneration);
SmallClass smallClass = new SmallClass();
Console.WriteLine(GC.GetGeneration(smallClass));
GC.Collect();
Console.WriteLine(GC.GetGeneration(smallClass));
GC.Collect();
Console.WriteLine(GC.GetGeneration(smallClass));
GC.Collect();
public class SmallClass
{
int i, j, k;
}
public class BigClass
{
int[] ints = new int[24000];
}
BigClass bigClass = new BigClass();
Console.WriteLine(GC.GetGeneration(bigClass));
标记: 找出所以引用不为0的实体,
方法: 找到所有GC的根节点(GC Root),将他们放到队列里,然后依次递归遍历所有的根节点以
及引用的所有子节点 和子子节点,将所有遍历到的节点标记为live。弱引用不考虑在内。==》 Tree
GC Root:
全局变量,静态变量,栈上的所有局部变量(JIT)栈上传入的参数变量,寄存器中的变量
本文深入探讨了垃圾回收(GC)的三代概念及其对象大小划分标准,包括G0、G1和G2的不同角色与生存对象的迁移过程。通过具体代码示例展示了不同大小对象在GC中的行为变化,并介绍了GC根节点的查找与标记算法。

1198

被折叠的 条评论
为什么被折叠?



