1.垃圾回收(GC)

   1)如何判断一个对象不再引用或者不再需要

        a) 引用计数算法: 缺点是不能解决循环引用的问题

        b) 可达性分析法:

   2) 垃圾回收算法

        a) 标记 - 清除算法: 缺点 -> 标记清除之后会产生大量的碎片

             

        b) 标记 - 整理算法: 标记过程和“标记-清除”算法一样,单后续步骤不是直接对可回收对象进行清理,而是让所有存活对象都向一端移动,然后直接清理掉边界意外的内存

             

        c) 复制算法:将可用内存划分相等的两块,每次只使用其中的一块,当这一块用完以后,就将该块上活着的对象移到另一块上去,然后再把使用过的内存一次清理掉。

            优点: 简单、高效      缺点:可用空间缩小到原来的一半

             

        d) 分代收集算法:根据对象存活周期不同,将内存划分为好几块,然后根据各块不同特点分别选用适合自己的回收算法.

   3).垃圾回收器

        

    a) Serial收集器

       该收集器是一个单线程的收集器,除此之外,该收集器在进行垃圾回收的时候会"Stop the world",即会停止所有一切用户线程。

    b) ParNew收集器

        该收集器是Serial的多线程版本,其他基本上与Serial一致,也会"Stop the world"。

    c) Parallel Scavenge收集器

        多线程的采用复制算法的垃圾回收器,其目标是达到一个可控制的吞吐量。所谓吞吐量:

            吞吐量 = 运行用户代码时间/(运行用户代码时间 + 垃圾收集时间)

     d) Serial Old

         该收集器是Serial的老年代版本,也是一个单线程的收集器,使用“标记整理”算法

     e) Parallel Old

         该收集器是Parallel Scavenga收集器的老年代版本,使用多线程和“标记-整理”算法

     f) CMS收集器

         CMS(Concurrent Mark Sweep)收集器是一种获取最短回收停顿时间为目标的收集器。采用“标记-清除”算法

         主要包括一下4个步骤:

         - 初始标记(CMS initial mark): 只标记GC Roots能直接关联到的对象,速度很快

         - 并发标记(CMS concurrent mark): 进行GC Roots Tracing的过程。该过程可以和用户线程进行

         - 重新标记(CMS remark):为了修正并发标记期间因用户程序标记发生变动的那一部分对象的标记记录,会比初始标记时间稍长

         - 并发清除(CMS concurrent sweep):可以和用户线程一起进行

        其中初始标记和并发标记这两个步骤仍然需要"Stop the world"

posted on 2015-08-20 15:15  激战  阅读(134)  评论(0编辑  收藏  举报