CLR GC

一、垃圾回收算法

  每个应用程序都包含一组根(root),每个根都是一个存储位置,他要么为null,要么指向托管堆的一个对象,类型中定义的静态字段、局部变量、方法参数等都会被认为是根。

  垃圾回收器(GC)开始执行时,他会假设堆中的所有内存都是垃圾,换句话说,他假设线程栈、CUP寄存器中没有指针引用了堆中的对象,GC会在第一阶段对堆中的对象作标记(marking),如果发现跟引用了一个对象,就在对象的同步索引块上开启一位进行标记,同一个对象只标记一次;标记完成后,GC开启第二阶段:压缩,GC会线性遍历堆,寻找未标记的对象内存块,优先移动连续的较大的内存块到压缩堆,垃圾回收会造成显著的性能损失。

posted @ 2016-07-22 17:26  David·Li  阅读(198)  评论(0编辑  收藏  举报