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

mac2024-07-10  50

package com.jvm.jvmdemo.test; /** * @author :miaoqs * @date :2019-10-30 09:58 * @description: */ public class GCGG1LogsTest { /** * 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]; a2 = new byte[4 * size]; // GC a3 = new byte[4 * size]; a4 = new byte[8 * size]; a4 = null; // a4变成垃圾 // FULL GC System.gc(); } /** * * TODO * G1 垃圾收集器的关键设计之一则是使得由于垃圾收集造成的应用暂停时间和分布变得可预测,可配置。 * G1 物理上将整个堆分成 了不同大小的固定区域(差不多 2048 个), * 每个区域都可以被称为 Eden 区,Survivor 区,或 Old 区, * 逻辑上 Eden 区+Survivor 区为 年轻代,Old 区则为老年代, * 从而避免了每次 GC 时,回收整个堆空间.可通过-XX:+UseG1GC 开启. * * TODO VM options JVM参数配置 * -Xms40M -Xmx40M -Xmn20M -XX:+PrintGCDetails -XX:+PrintGCDateStamps * -XX:+UseG1GC * * * 2019-10-31T18:29:45.421-0800: [GC pause (G1 Humongous Allocation) (young) (initial-mark), 0.0014086 secs] * [Parallel Time: 1.1 ms, GC Workers: 4] * TODO [GC pause (G1 Humongous Allocation) (young) (initial-mark), 0.0014086 secs] * [Parallel Time: 1.1 ms, GC Workers: 4] 初始化标记开始,并开始暂停,耗时1.1 ms, 4线程并行 * TODO 各种GC的时间消耗开始 * [GC Worker Start (ms): Min: 158.8, Avg: 158.9, Max: 159.1, Diff: 0.3] * [Ext Root Scanning (ms): Min: 0.0, Avg: 0.4, Max: 1.0, Diff: 1.0, Sum: 1.7] * [Update RS (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0] * [Processed Buffers: Min: 0, Avg: 0.0, Max: 0, Diff: 0, Sum: 0] * [Scan RS (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0] * [Code Root Scanning (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0] * [Object Copy (ms): Min: 0.0, Avg: 0.5, Max: 0.7, Diff: 0.6, Sum: 1.9] * [Termination (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0] * [Termination Attempts: Min: 2, Avg: 6.0, Max: 10, Diff: 8, Sum: 24] * [GC Worker Other (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0] * [GC Worker Total (ms): Min: 0.7, Avg: 0.9, Max: 1.0, Diff: 0.3, Sum: 3.8] * [GC Worker End (ms): Min: 159.8, Avg: 159.8, Max: 159.8, Diff: 0.0] * [Code Root Fixup: 0.0 ms] * [Code Root Purge: 0.0 ms] * [Clear CT: 0.0 ms] * [Other: 0.3 ms] * [Choose CSet: 0.0 ms] * [Ref Proc: 0.2 ms] * [Ref Enq: 0.0 ms] * [Redirty Cards: 0.0 ms] * [Humongous Register: 0.0 ms] * [Humongous Reclaim: 0.0 ms] * [Free CSet: 0.0 ms] * TODO 各种GC的时间消耗结束 * * [Eden: 4096.0K(20.0M)->0.0B(19.0M) Survivors: 0.0B->1024.0K Heap: 15.0M(40.0M)->9039.7K(40.0M)] * TODO [Eden: 4096.0K(20.0M)->0.0B(19.0M) Survivors: 0.0B->1024.0K Heap: 15.0M(40.0M)->9039.7K(40.0M)] * 暂停前后 Eden Survivor以及堆的内存大小对比 * [Times: user=0.01 sys=0.00, real=0.00 secs] * 2019-10-31T18:29:45.423-0800: [GC concurrent-root-region-scan-start] * 2019-10-31T18:29:45.423-0800: [GC concurrent-root-region-scan-end, 0.0005887 secs] TODO 扫描根对象域 * 2019-10-31T18:29:45.423-0800: [GC concurrent-mark-start] TODO 并发标记 * 2019-10-31T18:29:45.423-0800: [GC concurrent-mark-end, 0.0000302 secs] * 2019-10-31T18:29:45.428-0800: [GC remark 2019-10-31T18:29:45.428-0800: [Finalize Marking, 0.0000836 secs] 2019-10-31T18:29:45.428-0800: [GC ref-proc, 0.0000268 secs] 2019-10-31T18:29:45.428-0800: [Unloading, 0.0004242 secs], 0.0006414 secs] * [Times: user=0.00 sys=0.00, real=0.00 secs] * 2019-10-31T18:29:45.428-0800: [GC cleanup 20M->20M(40M), 0.0001790 secs] TODO 清理后堆空间的大小比较 * [Times: user=0.00 sys=0.00, real=0.00 secs] * 2019-10-31T18:29:45.429-0800: [Full GC (System.gc()) 20M->12M(40M), 0.0024750 secs] TODO Full GC * [Eden: 0.0B(19.0M)->0.0B(20.0M) Survivors: 1024.0K->0.0B Heap: 20.8M(40.0M)->12.6M(40.0M)], [Metaspace: 3369K->3369K(1056768K)] * [Times: user=0.01 sys=0.00, real=0.01 secs] * Heap * TODO GC 后的堆的内存变化 使用了12M * garbage-first heap total 40960K, used 12880K [0x00000007bd800000, 0x00000007bd900140, 0x00000007c0000000) * region size 1024K, 1 young (1024K), 0 survivors (0K) * * TODO 元空间内存变化 * Metaspace used 3376K, capacity 4496K, committed 4864K, reserved 1056768K * class space used 372K, capacity 388K, committed 512K, reserved 1048576K */ }

 

最新回复(0)