MAT简单分析内存溢出问题

模拟内存溢出情况

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
/**
 * 向List集合中添加100万个字符串,每个字符串由1000个UUID组成。如果程  序能够正常执行,最后打印ok。
 */
public class TestJvmOutOfMemory {
    public static void main(String[] args) {
        List<Object> list = new ArrayList<>();
        for (int i = 0; i < 10000000; i++) {
            String str = "";
            for (int j = 0; j < 1000; j++) {
                str += UUID.randomUUID().toString();
            }
            list.add(str);
        }
        System.out.println("ok");
    }
}

在这里插入图片描述

-Xms8m -Xmx8m -XX:+HeapDumpOnOutOfMemoryError

在这里插入图片描述

使用MAT进行分析

在这里插入图片描述
在这里插入图片描述
由分析结果可以看出,有92.16%的内存被Object[]占有,所以比较可疑。
在这里插入图片描述
在这里插入图片描述

MAT界面主要功能概览

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实时生成堆dump

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

柱状图(Histogram)

柱状图显示每个类的使用情况,比如类的数量,所占空间等
在这里插入图片描述
在这里插入图片描述

分组

在这里插入图片描述

排序

在这里插入图片描述

正则搜索

在这里插入图片描述

查看引用

在这里插入图片描述
在这里插入图片描述

代码

import java.util.ArrayList;
import java.util.Random;
/**
 * -Xms30m -Xmx30m -XX:SurvivorRatio=8 -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps
   -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/dump.hprof
 */
public class OOMTest {
    public static void main(String[] args) throws InterruptedException {
        ArrayList<Box> list = new ArrayList<>();
        while(true){
            Thread.sleep(100);
            list.add(new Box(new Random().nextInt(1024 * 1024)));
        }
    }
}

class Box{
    private byte[] data;

    public Box(int length) {
        this.data = new byte[length];
    }
}

两个直方图比较

在这里插入图片描述
在这里插入图片描述

入引用和出引用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

支配树

在这里插入图片描述
在这里插入图片描述

显示线程信息

在这里插入图片描述
在这里插入图片描述

显示堆总体信息

在这里插入图片描述
显示堆总体信息,比如消耗最大的一些对象等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值