理解Java GC日志

idea 在vm options处加入-XX:+PrintGCDetails,可打印GC日志。

 1 public class ReferenceCountingGC {
 2 
 3     public Object instance=null;
 4 
 5     private static final int _1MB=1024*1024;
 6 
 7     private byte[] bigSize=new byte[2*_1MB];
 8 
 9     public static void testGC(){
10         ReferenceCountingGC objA=new ReferenceCountingGC();
11         ReferenceCountingGC objB=new ReferenceCountingGC();
12         objA.instance=objB;
13         objB.instance=objA;
14 
15         objA=null;
16         objB=null;
17 
18         System.gc();
19     }
20 
21     public static void main(String[] args) {
22         testGC();
23     }
24 
25 }

打印GC日志为:

[GC (Allocation Failure) [DefNew: 3762K->512K(4928K), 0.0044320 secs] 3762K->2609K(15872K), 0.0171251 secs] [Times: user=0.00 sys=0.00, real=0.02 secs]
[Full GC (System.gc()) [Tenured: 2097K->560K(10944K), 0.0031949 secs] 4657K->560K(15872K), [Metaspace: 2131K->2131K(4480K)], 0.0036546 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
Heap
def new generation total 4992K, used 91K [0x04800000, 0x04d60000, 0x09d50000)
eden space 4480K, 2% used [0x04800000, 0x04816d20, 0x04c60000)
from space 512K, 0% used [0x04c60000, 0x04c60000, 0x04ce0000)
to space 512K, 0% used [0x04ce0000, 0x04ce0000, 0x04d60000)
tenured generation total 10944K, used 560K [0x09d50000, 0x0a800000, 0x14800000)
the space 10944K, 5% used [0x09d50000, 0x09ddc140, 0x09ddc200, 0x0a800000)
Metaspace used 2149K, capacity 2280K, committed 2368K, reserved 4480K

——————————————————————————————————————

“[GC” 说明垃圾收集的停顿类型。

“[Full GC”说明这次GC发生了Stop-The-World。此处是调用了System.gc()所触发的收集。

“[DefNew”、“[Tenured”表示GC发生的区域。Default New Generation。

“3762K->512K(4928K)”表示GC前该内存区域已使用容量->GC后该区域已使用容量(该内存区域总容量)。

“3762K->2609K(15872K)”表示GC前java堆已使用容量->GC后java堆已使用容量(java堆总容量)。

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

“[Times: user=0.00 sys=0.00, real=0.02 secs] ”表示用户态消耗的CPU时间,内核态消耗的CPU事件,操作从开始到结束所经过的墙钟时间(包括各种非运算的等待耗时)。

“tenured generation”老年代

“the space 10944K, 5% used”表示老年区的内存大小是10944K,5%被使用。

“Metaspace” Java8中,永久代已经被移除,被一个称为“元数据区”(元空间)的区域所取代。

原文地址:https://www.cnblogs.com/award/p/10834533.html