理解java虚拟机垃圾回收的GC日志

有需要可以查看我的完整思维导图链接:https://blog.csdn.net/qq_22701869/article/details/107525851

 

 

目录

1、模拟打印GC日志

使用System.gc();

 配置虚拟机打印垃圾回收的日志-XX:+PrintGCDetails

 2、日志分析


 

1、模拟打印GC日志

使用System.gc();

代码如下

public class TestGC {
    public static void main(String[] args) {
        System.gc();
    }
}

 配置虚拟机打印垃圾回收的日志-XX:+PrintGCDetails

详细配置有两种方式,参考链接

 2、日志分析

新生代Gc(Minor GC)
30.111:[ GC [ DefNew:3324K->152K(3712K),0.0025925secs]3324K->152K(11904K),
0.0031680secs]

老年代GC(Full Gc)
80.667:[ Full GC [Tenured:0K->210K(10240K),0.0149142secs]4603K->210K(19456K),
[Perm:2999K->2999K(21248K)],0.0150007secs]
[Times:user=0.01sys=0.00,real=0.02secs]

1、最前面的数字 30.111 和 80.667:代表了GC发生的时间,含义是从虚拟机启动以来经过的秒数

2、开头的 [GC [Full GC 说明了停顿类型;如果是Full说明发生了Stop-The-World的,出现 [Full 一般是因为分配担保失败,如果是调用Sytem.gc(),就会显示 [Full GC(System) ,如下

[Full GC (System.gc()) [PSYoungGen: 824K->0K(114688K)] 
[ParOldGen: 8K->766K(262144K)] 832K->766K(376832K), 
[Metaspace: 3542K->3542K(1056768K)], 0.0054807 secs] 
[Times: user=0.00 sys=0.00, real=0.01 secs] 

3、[ DefNew[Tenured[Perm表示Gc发生的区域

[ DefNew:Default New Generation新生代,使用Serial收集器

[ ParNew:ParallelNew Generation新生代,使用ParNew收集器

[Tenured:老年代

[Perm:Permanent Generation 永久代

[PSYoungGen、新生代,使用Parallel Scavenge收集器

4、3324K->152K(3712K)GC前该内存区域已使用容量_>GC后该内存区域已使用容量(该内存区域总容量

5、3324K->152K(11904K)GC前java堆已使用容量_>GC后java堆已使用容量(java堆总容量

6、0.0025925secs]:表示该内存Gc所占用的时间,单位是秒

有的收集器回给出更加确定的数据,比如[Times: user=0.00 sys=0.00, real=0.01 secs]

user:用户态消耗的CPU时间

sys:内核态消耗的CPU时间

real:操作从开始到结束所经过的墙钟时间

备注:墙钟时间包括各种非运算的等待耗时,例如等待磁盘I/O,等待线程阻塞,而CPU时间不包括这些耗时,user+sys>real很正常

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值