使用的是:+PrintGCDetails -XX:+PrintGCTimeStamps
输出的日志格式:
[Times: user=0.03 sys=0.00, real=0.01 secs] 363.375: [GC 363.375: [ParNew: 39424K->3249K(39424K), 0.0054790 secs] 69520K->37044K(126848K), 0.0055800 secs] 8.672: [Full GC 8.673: [Tenured: 26086K->30073K(87424K), 0.2213960 secs] 54718K->30073K(126848K), [Perm : 37565K->37565K(37568K)], 0.2214900 secs] [Times: user=0.32 sys=0.01, real=0.23 secs]
[GC]和[Full GC]是垃圾回收的停顿类型,而不是区分是新生代还是年老代。- [
Full GC]说明发生了Stop-The-World。如果是调用System.gc()触发的,那么将显示的是[Full GC (System)。 - 【ParNew】,【
DefNew】, 【Tenured】, 【Perm】:表示 GC 发生的区域,区域的名称与使用的 GC 收集器相关。 
- 【DefNew】:Serial 收集器中新生代名为 "Default New Generation"。
 - 【ParNew】: “Parallel New Generation”。
 - 【PSYoungGen】:对于 Parallel Scavenge 收集器,新生代名为 "PSYoungGen"。
 - 年老代和永久代也相同,名称都由收集器决定。
 
4. 收集大小的影响:
- ParNew: 39424K->3249K(39424K) 表示 “GC 前该区域已使用容量 -> GC 后该区域已使用容量 (该区域内存总容量) ”。
 - “69520K->37044K(126848K)”(方括号外) 表示 “GC 前Java堆已使用容量 -> GC后Java堆已使用容量 (Java堆总容量)”。
 
5. 花费时间: “0.0055800secs” 表示该区域GC所用时间,单位是秒。
6. [Times: user=0.32 sys=0.01, real=0.23 secs]
- user: 用户态消耗的CPU时间、
 - sys:内核态消耗的CPU时间
 - real: 操作从开始到结束所经过的墙钟时间。墙钟时间包括各种非运算的等待耗时,如IO等待、线程阻塞。CPU时间不包括等待时间,当系统有多核时,多线程操作会 叠加这些CPU时间,所以user或sys时间会超过real时间。
 
                    
                
                
            
        
浙公网安备 33010602011771号