GC 收集算法及几种收集器优缺点讲解

        垃圾收集算法主要有:

            1. 标记-清除算法:  标记+清除.  缺点:效率问题和空间问题,标记清除之后会产生大量不连续的内存碎片, 可能导致空间碎片太多,当程序在以后运行过程中需要分配较大对象是无法找到足够连续内存而不得不提前触发另一次垃圾收集动作.

            2.复制算法.   这种算法的代价是将内存缩小为原来的一半.有些高啊.不过,现在商业虚拟机都采用这种算法回收 **新生代**! 将内存分为一块较大的 Eden 和俩快较小的 survivor 空间.每次使用 Eden 和其中的一块 Survivor. 当回收时,将 Eden 和 survivor 里活着的对象一次性的 copy 到另一个 survivor 空间上.然后把 Eden 和survivor空间清理掉. Hotspot 虚拟机默认把 Eden 和 survivor 空间分配比例是8:1.  这里有个内存分配担保(不再赘述).

            3.标记-整理算法.  老年代一般使用这种算法. 让存活的对象都像一端移动,然后直接清理掉端边界以外的内存.

            4.分代收集算法.根据对象的存活周期的不同将内存划分为几块. ----  新生代选用复制算法,老年代选用"标记-清理"或"标记-整理"算法.

      垃圾收集器:

           1: 新生代----- serial 单线程 --> ParNew 多线程 ---> Parallel Scavenge 吞吐量,自适应调节策略. ------ **复制算法.****

           2: 老年代----- *serial old 单线程,"标记-整理"算法,主要被用在 client 模式下.

                                 **Parallel old 多线程,"标记-整理"算法.

                                 ***CMS  一种以获取最短回收停顿时间为目标的收集器. 分4步骤: 初始标记 -->并发标记 ---> 重新标记 --->并发清除

                                            CMS 三个显著的缺点: a. 对 cpu 资源非敏感.

                                                                           b. 无法处理浮动垃圾,可能出现" concurrent Mode failure" 失败而导致另一次 full GC 的产生.

                                                                           c. 由于是基于"标记-清除"算法导致产生大量空间碎片.

                                ****G1  技术最前沿成果. 显著优点: 基于"标记-整理"算法,不会产生碎片. 另一个就是可以精准控制停顿,既能让使用者明确指定一个长度为 M 毫秒的时段片内,消耗在垃圾收集上的时间不得超过 N 毫秒. 不牺牲吞吐量的前提下完成低停顿的内存回收.

             

                            

原文地址:https://www.cnblogs.com/bjxq-cs88/p/9122863.html