JDK8垃圾回收GC日志分析【第一篇】

package com.clazz.clazz_demo.two_father;

/**
 * @author :miaoqs
 * @date :2019-10-30 09:58
 * @description:
 */
public class TwoFatherTest {

    /**
     * 2M容量
     */
    private static int size = 2* 1024 * 1024;

    public static void main(String[] args) {
        byte[] a1, a2, a3, a4;

        a1 = new byte[2 * size];
        a1 = new byte[2 * size];
        a2 = new byte[2 * size];
        // 添加 a3会发生 GC
        a3 = new byte[2 * size];
        a4 = new byte[4 * size];
        a4 = null;

        // 这个会触发Full GC
        System.gc();
    }

    /**
     * TODO【串行收集器】GC日志
     *
     * VM 运行参数【堆内存总共40M 新生代20M{eden 16M  From 2M To 2M} 年老代 20M 】
     * -Xms40M 堆内存大小为40M
     * -Xmx40M 堆内存最大大小为40M
     * -Xmn20M 新生代大小为20M
     * TODO VM options配置下面这两行:
     *      -Xms40M -Xmx40M -Xmn20M -XX:+PrintGCDetails -XX:+PrintGCDateStamps
     *      -XX:+UseSerialGC
     *
     *  TODO 启用 Serial GC,此时,年轻代将使用标记-复制(mark-copy)算法,老年代使用标记-清理- 压缩(mark-sweep-compact)算法,并且均以单线程,stop-the-world 的方式运行垃圾收集过程。
     *
     * TODO GC 【添加 a3会发生 GC】这次GC 新生代为 0,from 和 to 区 存不下4M的,所以直接进入老年代。 年老代为 8M,对应下面对的使用为8M左右
     * [GC (Allocation Failure) 2019-10-31T15:37:59.289-0800:
     *      [DefNew: 15581K->771K(18432K), 0.0067791 secs] 15581K->8963K(38912K), 0.0068184 secs] [Times: user=0.01 sys=0.00, real=0.01 secs]
     *      *      TODO 解释
     *      *          15581K->771K(18432K)
     *      *              15581K GC前新生代占用内存
     *      *              771K  GC后新生代占用内存
     *      *              18432K 新生代总内存
     *      *          15581K->8963K(38912K)
     *      *              15581K GC前堆内存占用
     *      *              8963K GC后堆内存占用
     *      *              38912K 堆内存总量
     *      *          user=0.01 sys=0.00, real=0.01
     *      *              user=0.01 GC用户耗时
     *      *              sys=0.00  GC系统耗时
     *      *              real=0.01 GC系统实际耗时
     *
     * [Full GC (System.gc()) 2019-10-31T15:37:59.298-0800:
     *      [Tenured: 8192K->12877K(20480K), 0.0051800 secs] 21569K->12877K(38912K),
     *      [Metaspace: 3364K->3364K(1056768K)], 0.0052319 secs] [Times: user=0.01 sys=0.00, real=0.01 secs]
     *
     * TODO GC之后的日志【所有GC完成以后的内存暂用情况】
     * Heap
     *  TODO GC后新生代情况【新生代没有东西】
     *  def new generation   total 18432K, used 491K [0x00000007bd800000, 0x00000007bec00000, 0x00000007bec00000)
     *   eden space 16384K,   3% used [0x00000007bd800000, 0x00000007bd87afa0, 0x00000007be800000)
     *   from space 2048K,   0% used [0x00000007bea00000, 0x00000007bea00000, 0x00000007bec00000)
     *   to   space 2048K,   0% used [0x00000007be800000, 0x00000007be800000, 0x00000007bea00000)
     *
     *  TODO GC后年老代情况 根据计算应该是使用12M
     *  tenured generation   total 20480K, used 12877K [0x00000007bec00000, 0x00000007c0000000, 0x00000007c0000000)
     *    the space 20480K,  62% used [0x00000007bec00000, 0x00000007bf893640, 0x00000007bf893800, 0x00000007c0000000)
     *  TODO GC后元空间情况
     *  Metaspace       used 3371K, capacity 4496K, committed 4864K, reserved 1056768K
     *   class space    used 372K, capacity 388K, committed 512K, reserved 1048576K
     */
}

猜你喜欢

转载自blog.csdn.net/wildwolf_001/article/details/102839607