• JVM理论:(二/4)理解GC日志、垃圾收集器参数总结


    JVM的GC日志的主要参数包括如下几个: 
    -XX:+PrintGC 输出GC日志 
    -XX:+PrintGCDetails 输出GC的详细日志 
    -XX:+PrintGCTimeStamps 输出GC的时间戳(以基准时间的形式) 
    -XX:+PrintGCDateStamps 输出GC的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800) 
    -XX:+PrintHeapAtGC 在进行GC的前后打印出堆的信息 
    -XX:+PrintGCApplicationStoppedTime // 输出GC造成应用暂停的时间 
    -Xloggc:../logs/gc.log 日志文件的输出路径

    GC日志

      每一种收集器的日志格式都可以不同,但基本上都维持了一定的共性,以下两段GC日志为例:

    33.125:[GC[DefNew:3324K->152K(3712K),0.0025925secs]3324K->152K(11904K),0.0031680 secs]
    100.667:[FullGC[Tenured:0K->210K(10240K),0.0149142secs]4603K->210K(19456K),[Perm:2999K->2999K(21248K)],0.0150007 secs][Times:user=0.01 sys=0.00,real=0.02 secs]

      最前面的数字“33.125:”和“100.667:”代表了GC发生的时间,这个数字的含义是从Java虚拟机启动以来经过的秒数。

      开头的“[GC”和“[Full GC”说明了这次垃圾收集的停顿类型,而不是用来区分新生代GC还是老年代GC的。如果有“Full”,说明这次GC是发生了Stop-The-World的,例如下面这段新生代收集器ParNew的日志也会出现“[Full GC”(这一般是因为出现了分配担保失败之类的问题,所以才导致STW)。如果是调用System.gc()方法所触发的收集,那么在这里将显示“[Full GC(System)”。

    [Full GC 283.736:[ParNew:261599K->261599K(261952K),0.0000288 secs]

      接下来的“[DefNew”、“[Tenured”、“[Perm”表示GC发生的区域,这里显示的区域名称与使用的GC收集是密切相关的。

      Serial收集器中的新生代名为“Default New Generation”,所以显示的是“[DefNew”。

      ParNew收集器,新生代名称就会变为“[ParNew”,意为“Parallel New Generation”。

      Parallel Scavenge收集器,新生代称为“PSYoungGen”,老年代和永久代同理,名称也是由收集器决定的。

      可参考:http://www.cnblogs.com/mikevictor07/p/5024645.html?utm_source=tuicool&utm_medium=referral

      后面方括号内部的“3324K->152K(3712K)”含义是“GC前该内存区域已使用容量->GC后该内存区域已使用容量(该内存区域总容量)”。 而在方括号之外的“3324K->152K(11904K)”表示“GC前Java堆已使用容量->GC后Java堆已使用容量(Java堆总容量)”。

      再往后,“0.0025925 secs”表示该内存区域GC所占用的时间,单位是秒。

    内存各区域分配日志

    Heap  
      def new generation   total 9216K, used 4326K    //年轻代   
      eden space 8192K,  51% used
      from space 1024K,  14% used  
      to space 1024K,   0% used
      tenured generation   total 10240K, used 6144K    //老年代  
      the space 10240K,  60% used
      compacting perm gen  total 12288K, used 2114K    //永久代(方法区)  
      the space 12288K,  17% used

    垃圾收集器参数总结

       

      

    参考链接:

      https://blog.csdn.net/column/details/14851.html

      https://blog.csdn.net/baidu_33116785/article/details/53258822

  • 相关阅读:
    ES head安装笔记, 还没有试
    sed用法笔记
    Kibana笔记
    ElasticSearch笔记
    Mongo聚合笔记
    java 判断是否为数字
    Redis 一:安装篇
    make问题:make[1] entering directory
    Java 多线程 简单实例 (消费者与生成者)的关系
    Java 多线程 简单实例 (Runnable)
  • 原文地址:https://www.cnblogs.com/zjxiang/p/9218211.html
Copyright © 2020-2023  润新知