17_3_垃圾回收器_日志分析和垃圾回收器的发展

1、常用参数详解

通过阅读GC日志,我们可以了解Java虚拟机内存分配与回收策略。

内存分配与垃圾回收的参数列表

  1. -XX:+PrintGC :输出GC日志。类似:-verbose:gc
  2. -XX:+PrintGCDetails :输出GC的详细日志
  3. -XX:+PrintGCTimestamps :输出GC的时间戳(以基准时间的形式)
  4. -XX:+PrintGCDatestamps :输出GC的时间戳(以日期的形式,如2013-05-04T21: 53: 59.234 +0800)
  5. -XX:+PrintHeapAtGC :在进行GC的前后打印出堆的信息
  6. -Xloggc:…/logs/gc.log :日志文件的输出路径

在这里插入图片描述
在这里插入图片描述

2、GC 日志补充说明

  1. “[GC"和”[Full GC"说明了这次垃圾收集的停顿类型,如果有"Full"则说明GC发生了"Stop The World"

  2. 使用Serial收集器在新生代的名字是Default New Generation,因此显示的是"[DefNew"

  3. 使用ParNew收集器在新生代的名字会变成"[ParNew",意思是"Parallel New Generation"

  4. 使用Parallel scavenge收集器在新生代的名字是”[PSYoungGen"

  5. 老年代的收集和新生代道理一样,名字也是收集器决定的

  6. 使用G1收集器的话,会显示为"garbage-first heap"

  7. Allocation Failure表明本次引起GC的原因是因为在年轻代中没有足够的空间能够存储新的数据了。

  8. [ PSYoungGen: 5986K->696K(8704K) ] 5986K->704K (9216K)

    中括号内:GC回收前年轻代大小,回收后大小,(年轻代总大小)
    括号外:GC回收前年轻代和老年代大小,回收后大小,(年轻代和老年代总大小)

  9. user代表用户态回收耗时,sys内核态回收耗时,real实际耗时。由于多核线程切换的原因,时间总和可能会超过real时间

3、常用日志分析工具

常用的日志分析工具有:GCViewer、GCEasy、GCHisto、GCLogViewer、Hpjmeter、garbagecat等。

推荐:GCeasy

4、垃圾回收器的发展

  1. SerialGC的开销(本身、GC相关数据结构、线程)非常小,随着云计算的兴起,在serverless等新的应用场景下,Serial GC找到了新的舞台。

  2. CMS在 JDK9中 已经被标记为废弃,并在JDK14版本中移除。

  3. Shenandoah(Open JDK12支持),由 RedHat 实现

    • Shenandoah GC的弱项:高运行负担下的吞吐量下降。
    • Shenandoah GC的强项:低延迟时间。
  4. ZGC

    • ZGC收集器是一款基于Region内存布局的,(暂时)不设分代的,使用了读屏障、染色指针和内存多重映射等技术来实现可并发的标记-压缩算法的,以低延迟为首要目标的一款垃圾收集器。
    • ZGC的工作过程可以分为4个阶段:并发标记 - 并发预备重分配 - 并发重分配 - 并发重映射 等。
    • ZGC几乎在所有地方并发执行,除了初始标记是STW的。所以停顿时间几乎就耗费在初始标记上,这部分的实际时间是非常少的。
  5. AliGC是阿里巴巴JVM团队基于G1算法,面向大堆(LargeHeap)应用场景。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值