JAVA垃圾收集(整理)

垃圾回收算法

1.标记-清除算法:第一阶段首先标记出所有需要回收的对象,第二阶段对已经标记的对象进行清除。

  • 优点

    由于标记和清除两个阶段都要stop the word,所以清理的干净

  • 缺点

    标记和清除两个阶段停止时间长,效率不高
    清除后由于空间不连续,所有会产生不连续的内存碎片,不利于存储大的对像

2.复制算法
对空间进行合理划分。比如分成两份,只使用其中的一份,当这份内存空间用完,对把存活的对象复制到另一份空闲的空间中。然后一次行清理第一块空间中的内容。

  • 优点

   避免碎片空间

  • 缺点

    需要有备用空间(由于新生代对象98%都是“朝生夕死”,所以安排好备用空间的比例,会是不错的选择)

3.标记-整理算法
第一阶段与“标记-清理”算法一致,第二阶段对存活的对象统一移动到一起,然后再对标记的对象进行清理。

  • 优点

    避免碎片空间

  • 缺点

    效率低

4.分带算法

根据对象存活周期的不通奖内存划分为几块,新生代和老年代,这样可以根据各年代的特点采取适当的收集算法。如老年代存活率高、没有额外空间进行备份,所以通常使用“标记-清理”或者“标记-整理”算法进行回收;新生代对象存活率不高,所以比较适合采取“复制算法”。

垃圾收集器

垃圾收集器是垃圾回收算法的具体实现。

1.Serial收集器

最基本的收集器,它采取单线程、会收时必须停止其他所有的线程stop the word,直到收集结束。适合作为Client的新生代收集器

  • 优点

    清理的干净

  • 缺点

   需要暂停所有线程

2.ParNew收集器

Serial的多线程版本,Service模式下新生代的首选收集器

3.Paraller Scavnge收集器

新生代收集器,采用“标记-复制”算法,以吞吐量作为目标(减少停顿时间),即吞吐量=运行用户代码时间/(运行用户代码时间+垃圾收集时间)。

4.Serial Old收集器

Serial的收集器的老年代版本,同样时单线程收集器,采用“标记-整理”算法。

5.Paraller Old收集器

Paraller Scavnge收集器的老年代版本。

6.CMS收集器

是一种以获取最短回停顿时间为目标的收集器。适合B/S系统的服务端使用。操作分为初始标记、并发标记、重新标记、并发清除。“初始标记”、“重新标记”两阶段会Stop the world。

  • 优点

       并发收集、低停顿

  • 缺点

        无法处理浮动垃圾,即清理过程中产生的新垃圾

         基于“标记-清除”算法,会产生大量碎片空间

7.G1收集器

优点

并行与并发

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值