JVM(Java虚拟机)(二)垃圾收集3-jvm垃圾收集器

 

垃圾收集器

Serial收集器

单线程收集器,在垃圾收集的过程中必须暂停到其他所有的工作线程。
虚拟机在client模式下的默认新生代收集器

ParNew收集器

是Serial的多线程版本,是一款并行收集器,可以用-XX:ParallelGCThreads来控制垃圾收集的线程数。

Parallel Scavenge 收集器

新生代并行收集器,关注垃圾收集事用户线程的停顿时间,目标是达到一个可控制的吞吐量。
-XX:MaxGCPauseMillis 参数允许的值是一个大于0的毫秒数,收集器尽可能地保证内存回收花费的时间不超过该值。
-XX:GCTimeRatio 参数是一个大于0小于100的整数,即用户线程时间与垃圾收集时间的比率,相当于吞吐量的倒数,默认值是99,那么允许1%的垃圾回收时间。
-XX:UseAdaptiveSizePolicy 开关参数,打开后,不需要设置新生代、Eden与Survivor的比例、今生老年代对象大小等参数,虚拟机动态调节。

 

 

Serial Old 收集器

Serial old 收集器是Serial 收集器的老年代版本,是一个但线程收集器,使用标记整理算法。有两个用途:1. JDK1.5之前的版本与Parallel Scavenge收集器搭配使用;2. 作为CMS收集器的后备方案,在并发收集发生Concurrent Mode Failure时使用。

 

 

Paralel Old 收集器

 

 

CMS 收集器

老年代,标记清理算法。
是一种以获取最短回收停顿为目标的收集器。分四个步骤:初始标记->并发标记->重新标记->并发清除,初始标记和重新标记仍需要 Stop The World。
缺点:1. 由于并发,对CPU资源非常敏感;2. 无法收集浮动垃圾;3. 标记清除算法产生大量空间碎片。
由于并发清理阶段,用户线程产生的垃圾,CMS无法清除,这部分垃圾称为浮动垃圾。由于并发,CMS不能像其他垃圾收集器那样等到老年代几乎填满在进行收集,需要预留一部分让程序运行。-XX:CMSInitiatingOccupancyFraction 的值来设置触发垃圾收集的百分比,JDK1.5默认68%,JDK1.6默认92%。
由于会产生空间碎片,老年代可能无法为大对象提供内存就要触发 Full GC。-XX:+UserCMSCompactAtFullCollection 开关参数,默认开启。用于进行Full GC时开启内存碎片的合并整理。-XX:CMSFullGCsBeforeCompaction 这个参数用于设置执行多少次不压缩的Full GC后,跟着来一次带压缩的,默认值时0,表示每次进入Full GC时都进行碎片整理。

 

 

G1 收集器

特点:1. 并行与并发;2.分代收集;3.空间整合;4.可预测的停顿。
化整为零的思路,把java堆分成多个region,使用remebered set避免全堆扫描,如果引用对象在不通的region,通过CarTable把相关引用信息记录到被引用对象所属的Region的Remembered Set中,当进行内存回收时,在GC根结点的枚举范围加入Remembered Set即可保证不对全堆扫描也不会有遗漏。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值