常用垃圾收集器笔记

垃圾收集器多种垃圾收集器,包括:串行垃圾收集器、并行垃圾收集器、CMS(并发)垃圾收集器、G1垃圾收集器

串行垃圾收集器serial

使用算法:年轻代使用 复制算法 , 老年代使用标记整理算法

  • 特点:
    • 单线程进行垃圾回收,垃圾回收时,只有一个线程在工作 停顿延迟高
  • 缺点
    • 停顿延迟高:执行回收时所有的Java线程都停止工作
  • 参数设定 
    • -XX:+UseSerialGC  年轻代和老年代都使用串行垃圾收集器
    • -XX:+PrintGCDetails  打印垃圾回收的详细信息

并行垃圾收集器 parnew

工作机制同serial相同,区别在于是多线程,效率提高

  • 特点
    • 多线程执行垃圾回收 
  • 缺点
    • 执行垃圾回收时所有的Java线程都停止工作
  • 参数设定
    • XX:+UseParNewGC参数设置年轻代使用ParNew回收器

ParallelGC垃圾收集器

ParallelGC收集器工作机制和ParNewGC收集器一样,只是在此基础之上,新增了两个和系统吞吐量相关的参数,使得其使用起来更加的灵活和高效。

  • 相关参数如
    • -XX:+UseParallelGC 年轻代使用ParallelGC垃圾回收器,老年代使用串行回收器。
    • -XX:+UseParallelOldGC  年轻代使用ParallelGC垃圾回收器,老年代使用ParallelOldGC垃圾回收器。
      • 老年代使用ParallelOldGC使用标记整理算法,是并行的
    • -XX:MaxGCPauseMillis  设置最大的垃圾收集时的停顿时间,单位为毫秒 慎用:ParallelGC为了达到设置的停顿时间,可能会调整堆大小或其他的参数,如果堆的大小设置的较小,就会导致GC工作变得很频繁
    • -XX:GCTimeRatio 垃圾回收时间占程序运行时间的百分比,公式为1/(1+n)。 默认值为99,也就是垃圾回收时间不能超过1%
    • -XX:UseAdaptiveSizePolicy  自适应GC模式,垃圾回收器将自动调整年轻代、老年代等参数,达到吞吐量、堆大小、停顿时间之间的平衡。

CMS并发收集器

  • 使用标记-清除算法的垃圾回收器,是针对老年代垃圾回收的,通过参数-XX:+UseConcMarkSweepGC进行设置
  • 缺点
    • 对cpu资源敏感
    • 无法处理浮动垃圾,可能执行失败呆滞Full GC 
      • 浮动垃圾指当次无法清楚的垃圾,留到下一次清除
    • 标记-清除算法会产生磁盘碎片,可以 设置+UseCMSCompactAtFullCollection开启(默认开启),当要进行full GC 时 先进行磁盘碎片整理,整理过程单线程,会导致停顿
  • 执行过程
    • 初始化标记(CMS-initial-mark) ,标记root,会导致停顿
    • 并发标记(CMS-concurrent-mark),与用户线程同时运行;
    • 预清理(CMS-concurrent-preclean),与用户线程同时运行;
    • 重新标记(CMS-remark) ,会导致停顿;
    • 并发清除(CMS-concurrent-sweep),与用户线程同时运行;

G1垃圾收集器(重点)

jdk1.7中正式使用的全新的垃圾收集器

  • 特点:
    • 并发与并行:充分利用多核资源缩短停顿时间,执行回收和java程序并行
    • 分代收集:同其他收集器相同,只是不用借助其他收集器
    • 空间整合:整体采用标记-整理算法,局部采用复制算法  都不会产生磁盘碎片
    • 可预测停顿:G1和CMS都是最求减低给停顿时间,但G1可以预测停顿时间,实现指名在一个M毫秒长时间片段内,停顿时间不能超过N毫秒
  • 流程
    • 初始标记 单线程
    • 并发标记  多线程
    • 最终标记 多线程
    • 垃圾回收 多线程

怎么读GC日志

参数 -XX:+PrintGCDetails  打印垃圾回收的详细信息

打印日志信息
年轻代的内存GC前后的大小:
DefNew 执行垃圾回收采用的收集器
4416K->512K(4928K) 年轻代GC前,占有4416K内存,GC后,占有512K内存,总大小4928K
0.0046102 secs  C所用的时间,单位为毫秒。
4416K->1973K(15872K) 表示,GC前,堆内存占有4416K,GC后,占有1973K,总大小为15872k
[GC (Allocation Failure) [DefNew: 4416K->512K(4928K), 0.0046102 secs] 4416K->1973K(15872K), 0.0046533 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 

Full GC 表示是内存空间全部进行GC
[Full GC (Allocation Failure) [Tenured: 10944K->3107K(10944K), 0.0085637 secs] 15871K->3107K(15872K), [Metaspace: 3496K->3496K(1056768K)], 0.0085974 secs] [Times: user=0.02 sys=0.00, real=0.01 secs] 

jstat -gc 6219 查看进程6219 回收统计次数等信息

 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT   
9216.0 8704.0  0.0   6127.3 62976.0   3560.4   33792.0    20434.9   23808.0 23196.1 2560.0 2361.6      7    1.078   1      0.244    1.323

S0C:第一个Survivor区的大小(KB)
S1C:第二个Survivor区的大小(KB)
S0U:第一个Survivor区的使用大小(KB)
S1U:第二个Survivor区的使用大小(KB)
EC:Eden区的大小(KB)
EU:Eden区的使用大小(KB)
OC:Old区大小(KB)
OU:Old使用大小(KB)
MC:方法区大小(KB)
MU:方法区使用大小(KB)
CCSC:压缩类空间大小(KB)
CCSU:压缩类空间使用大小(KB)
YGC:年轻代垃圾回收次数
YGCT:年轻代垃圾回收消耗时间
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值