垃圾收集器(一)

垃圾收集器分类

  • 串行收集器 Serial:Serial,Serial Old;
  • 并行收集器 Parallel:Parallel Scavenge,Parallel Old,吞吐量优先;
  • 并发收集器 Concurent:CMS,G1,停顿时间优先;

并行(Parallel)

指多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态;适合科学计算,后台处理等弱交互场景;

并发(Concurent)

指用户线程与垃圾收集线程同时执行(但不一定是并行的,可能会交替执行),垃圾收集线程在执行的时候不会停顿用户程序的运行;适合对响应时间有要求的场景,比如Web;

停顿时间

垃圾收集器做垃圾回收中断应用执行的时间,-XX:MaxGCPauseMills;

吞吐量

花在垃圾收集的时间和花在应用时间的占比,-XX:GCTimeRetio=<n>,垃圾收集时间占:1/1+n;
注:衡量一个垃圾收集器的好坏的时候,以吞吐量为最大,停顿时间最小为最好;

开启串行收集器 Serial

  • -XX:+UseSerialGC 作用于新生代;
  • -XX:+UseSerialOldGC 作用于老生代;

注:Web环境下不可能用到串行收集器;

开启并行收集器 Parallel

吞吐量优先;

  • -XX:+UseParallelGC 作用于新生代;
  • -XX:+UseParallelOldGC 作用于老生代;
查看进程是否开启了ParallelGC
PS C:\Users\LiXinlei> jinfo -flag UseParallelGC 11924
-XX:+UseParallelGC
PS C:\Users\LiXinlei> jinfo -flag UseParallelOldGC 11924
-XX:+UseParallelOldGC

注:Server模式下默认的收集器;

开启并发收集器 Concurent

响应时间/停顿时间优先;

CMS(Concurrent Mark Sweep)
  • -XX:+UseConcMarkSweepGC 作用于Old区;
  • -XX:+UseParNewGC 默认用Parallel New作用于Yong区;
G1(Garbage-First)
  • -XX:+UseG1GC
查看进程是否开启了ConcMarkSweepGC
PS C:\Users\LiXinlei> jinfo -flag UseConcMarkSweepGC 8180
-XX:+UseConcMarkSweepGC
PS C:\Users\LiXinlei> jinfo -flag UseParNewGC 8180
-XX:+UseParNewGC

垃圾收集器搭配

  • 有连线的是可以相互使用的;
  • JDK8推荐使用G1,性能比较好,在Yong区和Old区都可以使用;
  • 虚线表示CMS可能退化成SerialOld,空间担保分配失败;


    8195388-97e28ca2e306be2d.png
    垃圾收集器搭配.png

如何选择垃圾收集器

  • 优先调整堆的大小,让JVM自己来选择;
  • 如果内存小于100M,使用串行收集器;
  • 如果是单核,并没有停顿时间的要求,串行或JVM自己选;
  • 如果允许停顿时间超过1秒,选择并行或JVM自己选;
  • 如果响应时间非常重要,并且不能超过1秒,使用并发收集器;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值