OOM异常后GC收集日志信息

OOM异常后GC收集日志信息

我们先对-Xms -Xmx等参数做一个设置 方便来出现OOM异常(我们将堆的大小设定为10m)

在这里插入图片描述

我们的测试代码

package com.zyk;

import java.util.Random;

public class JVMTest {
    public static void main(String[] args) throws  Exception{
       /* long maxMemory =Runtime.getRuntime().maxMemory();
        long totalMemory =Runtime.getRuntime().totalMemory();
        System.out.println("-Xmx:MAX_MEMORY  =  "+maxMemory+"字节"+(maxMemory/(double)1024/1024)+"MB");
        System.out.println("-Xms:TOTAL_MEMORY  = "+totalMemory+"字节"+(totalMemory/(double)1024/1024)+"MB");*/
        String str = "hello";
        while (true) {
            str += str + new Random().nextInt(988898989) + new Random().nextInt(799898989);
        }
    }
}

结果图

在这里插入图片描述

我们对红框选中的日志信息做一个简单分析

[GC (Allocation Failure)
[PSYoungGen: 2029K->504K(2560K)] 
2029K->676K(9728K), 0.0009753 secs]
[Times: user=0.00 sys=0.00, real=0.00 secs] 
[GC (Allocation Failure) [PSYoungGen: 2029K->504K(2560K)]
 2029k:YongGC之前新生代的内存占用
 504k:YongGC之后新生代的内存占用
 2560k:新生代总共的大小(堆内存我们分配了10m 这里新生代大致分配了三分之一)
2029K->676K(9728K)
2029k:YongGC之前JVM堆的内存占用
676k:YongGC之后JVM堆的内存占用
9728k:JVM对的总大小(约等于我们分配的10m)

这张图片展示的更加清楚

在这里插入图片描述

我们在对OOM之前最后一次的FullGC做一次分析
在这里插入图片描述

[Full GC (Allocation Failure) [PSYoungGen: 0K->0K(2048K)]
[ParOldGen: 5040K->5020K(7168K)] 
5040K->5020K(9216K),
[Metaspace: 3502K->3502K(1056768K)], 0.0075995 secs] 
[Times: user=0.00 sys=0.00, real=0.00 secs] 
[ParOldGen: 5040K->5020K(7168K)] 
5040k:GC前old区占用的空间大小
5020k:GC后old区占用的空间大小
7168k:old区总大小
5040K->5020K(9216K),
5040k:GC前JVM堆的内存占用
5020k:GC后JVM堆的内存占用
9216k:JVM堆的总大小(约等于young区加old区的大小)
发布了39 篇原创文章 · 获赞 19 · 访问量 1461

猜你喜欢

转载自blog.csdn.net/weixin_44222272/article/details/105657536
今日推荐