摘要:GC目前的问题是,会暂停、阻碍代码的运行,即stop the world。增量式GC处理的就是这个问题。将GC变得可一阶段一阶段进行。 分阶段运行的思路并不难,但具体要解决的问题其实是分阶段GC后,如何保证下次继续时,中断过程中引用关系的变化不会对GC造成影响。 三色标记法是一个逻辑上的抽象,将对象
阅读全文
摘要:分代垃圾回收,基于的是“大部分的对象,在生成后马上就会变成垃圾”这一经验上的事实为设计出发点。此前讨论过基于引事实的另一个垃圾回收算法,引用计数出的一些优化思路。 分代的关键是: 分代垃圾回收的典型是Ungar的分代垃圾回收。 它将堆分成如下形式: 如上,分成新生代与老年代。 在新生代内,又分成了生
阅读全文
摘要:垃圾回收复制算法的基本思想很直观,甚至看上去浪费。将现有堆一分为二,一个用完后,将活动对象拷贝到另一半。但是这样做却有一些比较明显的优点。 先来看下具体算法。 看上去简单,其实还是有一些要注意的地方。 第一是防止重复拷贝,对象之间的引用可以很复杂,各种交叉;第二是拷贝后,新老堆中的引用关系要缕顺。
阅读全文
摘要:引用计数: 引用计数于1960年被提出。思想是在对象中增加一个“被多少个外部对象引用”的字段。当没有外部引用时,字段自然为0,说明是垃圾了。 对象的分配延续前文,以free_list管理。 它与上文的mark_sweep区别在于,gc并非显式调用,而是伴随着对象的分配与覆盖(pa = pb,即pa原
阅读全文
摘要:mark-sweep,标记-清除算法,问世已有半个世纪,是经典的垃圾回收算法。它的思想是把过程分两步,第一步找到内存中所有的活动对象,并标记(mark)出来;第二步是遍历整个堆,将第一步未mark的对象内存回收入堆。 即: mark_sweep() { mark() sweep() } 要注意的一点
阅读全文
摘要:1. 确定二进制1的个数:->循环死&->x-1&x->查表,分写死与动态生成,动态生成方法:BitsSetTable256[i] = (i &1) + BitsSetTable256[i /2];->并行位运算: int BitCount4(unsigned int n){ n = (n &0x...
阅读全文