JVM垃圾回收算法及垃圾收集器

垃圾回收算法:

1、标记—清除算法

     分为标记、清除两个阶段,首先标记所有需要回收的对象,在标记完成后统一回收掉所有被标记的对象。

     缺点:一是效率问题,标记和清除过程的效率都不高;二是空间问题,标记清除后会产生大量不连续的内存碎片,可能会导致需要分配较大对象时无法找到足够的连续空间而触发下一次垃圾回收。

2、复制算法

     将可用内存安装容量划分为大小相等的两块,每次只使用其中的一块,当这一块用完了,就将存活的对象复制到另一块内存上去,然后再把已使用的内存空间一次清理掉。

     现代商业虚拟机都采用这种算法回收新生代。

3、标记整理算法

       标记过程与“标记—清除”算法一样,接着将所有存活的对象都向一端移动,然后直接清理掉端边界以外的内存。

4、分代收集算法

      当前商业虚拟机都采用的算法,只是根据对象的存活周期不同,将内存划分为几块,一般是划为新生代和老年代,然后根据各个年代的特点选用最适当的算法。


垃圾收集器:

1、Serial收集器

        只会用一条收集线程完成收集,在进行垃圾收集时必须暂停其他所有的工作线程直到收集结束。

        新生代采用复制算法,老年代采用标记—整理算法。

        虚拟机运行在Client模式下的默认新生代收集器。

2、ParNew

       ParNew其实就是Serial收集器的的多线程版本。

       许多运行在Server模式下虚拟机中首选的新生代收集器。

3、Parallel Scavenge收集器

       Parallel Scavenge收集器也是一个新生代收集器,也是使用复制算法,是并行的多线程收集器。

       主要关注吞吐量。

4、Serial Old

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

5、Parallel Old收集器

       Parallel Old是Parallel Scavenge收集器的老年代版本,使用多线程和“标记—整理”算法。这个收集器是JDK1.6才开始提供的。

6、CMS收集器

      CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器。使用“标记—清除”算法实现。运作过程分成四步:初始标记、并发标记、重新标记、并发清除。

7、G1收集器

     G1收集器是当前收集器技术发展最前沿成果,在JDK1.6Update14中提供了Early Access版本的G1处理器以供试用。

     G1收集器是基于“标记—整理”算法实现的收集器;它可以非常精确地控制停顿,既能让使用者明确地指定在一个长度为M毫秒的时间片段内,消耗在垃圾收集上的时间不得超过N毫秒,这几乎已经是实时Java垃圾收集器的特征了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值