垃圾收集器

Serial收集器

serial收集器是最基本,发展历史悠久的收集器,这是个单线程收集器。
在其进行垃圾回收时,必须暂停其他所有的工作线程,但这项工作实际上是由虚拟机在后台自动发起和自动完成的
该收集器依然是虚拟机运行在client上的默认新生代收集器,优点是简单而高效
对于限定的单个cpu来说,serial收集器由于没有线程交互的开销,专心做垃圾收集自然可以获得最高的单线程收集。
serial收集器对于运行在client模式下的虚拟机来说是一个很好的选择

采用和算法:
    1.新生代采用复制算法暂停所有用户线程
    2.老年代采用标记-整理算法,暂停所有用户线程

ParNew收集器

这个其实就是serial收集器的多线程版本,除了多线程垃圾回收外,其余行为还包括了serial收集器可用的所有其他控制参数
(例如: -XX:SurvivorRatio -XX:PretenureSizeThreshold -XX:HandlePromotionFailure),收集算法、stop the world,对象分配原则、回收策略等都与serial收集器完全一样
该收集器是运行在server模式下的虚拟机中首选新生代垃圾收集器,原因是因为目前只有该收集器能与CMS收集器配合工作

Parallel Scavenge 收集器

该收集器的目的是达到一个可控制的吞吐量
吞吐量 = 运行用户代码时间 /(运行用户代码时间+垃圾收集时间)
提供了两个参数用于精准控制吞吐量:
1.控制最大垃圾收集停顿时间 -XX:MAXGCPauseMillis 参数 >0的毫秒数 s ,
  收集器尽可能地保证内存回收时间花费不超过s
2.直接设置吞吐量大小的 -XX:GCTimeRatio
    参数时 0<x<100 的就是垃圾收集时间占总时间的比率
3.设置-XX:+UseAdaptiveSizePolicy 这是个开关参数
    当这个参数打开后,就不需要手动指定新生代的大小(-Xmn)、
    Eden与Survivor区的比利(-XX:SurvivorRatio)、晋升到老年代对象大小(-XX:PretenureSizeThreshold)等细节参数了
    虚拟机会动态调整这些参数以提供最适合的停顿时间或者最大的吞吐量。这种调节方式称为GC自适应的调节策略。

CMS收集器(Concurrent Mark Sweep)

目的:获取最短回收停顿时间
步骤:
    1.初始标记(需要停止用户线程)
    2.并发标记
    3.重新标记(需要停止用户线程)
    4.并发清除

缺点:
    1.对CPU资源非常敏感
    2.无法处理浮动垃圾
        因为在并发清理阶段,用户线程还在执行,会有新的垃圾产生,这些垃圾只能留在下一次GC时回收,这些垃圾成为浮动垃圾
    3.会产生大量内存碎片
年轻代收集器:
1.Serial
2.ParNew
3.Parallel Scavenge
4.G1
老年代收集器
1.CMS
2.Serial Old
3.Parallel Old
4.G1
触法GC条件
1.当Eden区没有足够的内存分配时,触法Minor GC
    如果对象在Eden出生并经历过第一次Minor Gc后仍然存活,并且能在Survivor容纳的话,
    将被移动到Survivor中,并且对象年龄+1。默认15岁会晋升到老年代中
2.只要老年代的连续空间大于新生代对象总大小或者历次晋升的平均大小就会进行MinorGC 否则FullGC
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值