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

Posted root_zhb

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)应用场景。

以上是关于17_3_垃圾回收器_日志分析和垃圾回收器的发展的主要内容,如果未能解决你的问题,请参考以下文章

17_2_垃圾收集器_简介G1回收器:区域化分代式

Java_垃圾回收算法

04_垃圾回收器

14_15_概述及垃圾回收相关算法

读Java性能权威指南(第2版)笔记17_垃圾回收D

JVM垃圾回收篇(扩展知识)