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

package com.jvm.jvmdemo.test;

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

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

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

        a1 = new byte[4 * size];
        a1 = new byte[4 * size]; // 之前的  a1 = 4M 变成垃圾
        a2 = new byte[4 * size];
        // GC
        a3 = new byte[4 * size]; 
        a4 = new byte[8 * size];
        a4 = null; // a4变成垃圾

        // FULL GC
        System.gc();
    }


    /**
     * TODO 垃圾回收日志
     * 
     * VM options JVM 参数设置
     *      -Xms40M -Xmx40M -Xmn20M -XX:+PrintGCDetails -XX:+PrintGCDateStamps 
     *      -XX:+UseConcMarkSweepGC
     *      
     * TODO 在 Java 内存管理基础一文中,已经知道 CMS 并非完全并发执行,仅第二个和第四个阶段是并发执行的。
     *      当使用 CMS 垃圾收集 器时,年轻代将采用并行,stop-the-world,
     *      标记-复制的收集算法,老年代则采用并发-标记-清理(Concurrent Mark-Sweep)的收集算法,
     *      该算法有利于降低应用暂定时间,可通过-XX:+UseConcMarkSweepGC 开启。
     *
     * 2019-10-31T18:11:28.927-0800: [GC (Allocation Failure) 2019-10-31T18:11:28.927-0800:
     *      [ParNew: 15628K->777K(18432K), 0.0053739 secs] 15628K->8971K(38912K), 0.0054231 secs] [Times: user=0.01 sys=0.00, real=0.01 secs]
     *          TODO 
     *              15628K->777K(18432K) 新生代由 12M 变为0M 
     *              15628K->8971K(38912K)堆内存由 12M 变为8M,主要是a1 + a2 =8M 在老年代
     * 2019-10-31T18:11:28.935-0800: [Full GC (System.gc()) 2019-10-31T18:11:28.935-0800:
     *      [CMS: 8194K->12861K(20480K), 0.0055566 secs] 21741K->12861K(38912K),
     *          TODO 
     *              8194K->12861K(20480K) 年老代由 8M变化为12M
     *              21741K->12861K(38912K)堆内存由 20M 变为 12M
     *      [Metaspace: 3354K->3354K(1056768K)], 0.0056020 secs] [Times: user=0.00 sys=0.00, real=0.01 secs]
     *
     * 2019-10-31T18:11:28.940-0800: [GC (CMS Initial Mark) [1 CMS-initial-mark: 12861K(20480K)] 12969K(38912K), 0.0001295 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
     * 2019-10-31T18:11:28.940-0800: [CMS-concurrent-mark-start]
     *
     * TODO GC 后的日志
     * Heap
     *  TODO GC后的年轻代 新生代被清空
     *  par new generation   total 18432K, used 600K [0x00000007bd800000, 0x00000007bec00000, 0x00000007bec00000)
     *   eden space 16384K,   3% used [0x00000007bd800000, 0x00000007bd896238, 0x00000007be800000)
     *   from space 2048K,   0% used [0x00000007bea00000, 0x00000007bea00000, 0x00000007bec00000)
     *   to   space 2048K,   0% used [0x00000007be800000, 0x00000007be800000, 0x00000007bea00000)
     *  TODO GC后的年老代 使用了 12M
     *  concurrent mark-sweep generation total 20480K, used 12861K [0x00000007bec00000, 0x00000007c0000000, 0x00000007c0000000)
     *  TODO GC后的元空间
     *  Metaspace       used 3369K, capacity 4496K, committed 4864K, reserved 1056768K
     *   class space    used 371K, capacity 388K, committed 512K, reserved 1048576K
     */
}

猜你喜欢

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