基于mat做简单的堆内存溢出分析

作者:神秘网友 发布时间:2020-10-31 15:31:20

基于mat做简单的堆内存溢出分析

基于mat做简单的堆内存溢出分析

文章目录

    • 下载启动mat
    • 生成 dump文件
    • 加载dump文件

首先我们需要下载启动mat

  1. 下载mat
    官网下载地址
    基于mat做简单的堆内存溢出分析
    这里更加自己的系统选择合适的压缩包
    我选择的是Windows(x86),下载之后是个zip包,解压就直接可以使用
    基于mat做简单的堆内存溢出分析
    如果分析的dump文件过大需要调整 在 MemoryAnalyzer.ini配置文件中修改 mat的启动参数
    基于mat做简单的堆内存溢出分析
    修改 xmx的启动堆内存即可

这里我们简单的生成一份dump文件

运行如下的程序

public static void main(String[] args) {
        long count = 0;
        List<Object> list = new ArrayList<>();
        while (true) {
            list.add(new Object());
            System.out.println("当前创建了第" + (++count) + "个对象");
        }
    }

jvm启动参数:

-Xms10m
-Xmx10m
-Xss512k
-Dfile.encoding=UTF-8
-XX:+UseConcMarkSweepGC
-XX:+UseParNewGC
-Xloggc:./logs/gc.log
-XX:+PrintGCDateStamps
-XX:+PrintGCDetails
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=./logs/heapdump.hprof

运行完后在logs生成 heapdump.hprof

点击File–>Open Heap Dump,选择dump文件,MAT会加载并分析该dump文件,如果文件较大,可能需要一些时间。

基于mat做简单的堆内存溢出分析
这里可以看到给我们分析的原因就是 内存都被一个实例对象占用了,就是java.lang.Object[]

我们查看详细的执行栈
基于mat做简单的堆内存溢出分析
基于mat做简单的堆内存溢出分析
可以明显看出异常代码位置

基于mat做简单的堆内存溢出分析相关教程

  1. Jenkins 基于 Docker 安装 超详细教程

    Jenkins 基于 Docker 安装 超详细教程 docker pull lamdaer/jenkins:0.0.1 docker run -p 8080:8080 --name myjenkins -d lamdaer/jenkins:0.0.1# 参数含义# --name 指定容器名称# -d 容器后台运行# -p 宿主机和容器端口映射 宿主机端口:容器暴露端口 访问 80

  2. 【LeetCode练习】[简单]733. 图像渲染

    【LeetCode练习】[简单]733. 图像渲染 【LeetCode练习】[简单]733. 图像渲染 733. 图像渲染 题目来源 算法思想:二维数组 题目: 思路:本题要求将给定的二维数组中指定的「色块」染成另一种颜色。「色块」的定义是:直接或间接相邻的同色方格构成的整体。 cl

  3. 2020-10-30

    2020-10-30 基于MATLAB的离散时间全通系统和系统辨识 主程序 clearclc%主程序(main_DTFT)nandy1 = [0.6 0.6 0.6]; %定义frame控件的背景色nandy = [1 1 1]; %定义整个图形的背景色nandy2 = [0.7 0.7 0.7]; %定义缺省控件的背景色mm = 1; hyh = 1; N = 30;w =

  4. CSS简单练习02

    CSS简单练习02 !DOCTYPE htmlhtmlheadmeta charset=utf-8title/titlestyle type=text/css* {margin: 0px;padding: 0px;}#box {background-image: url(img/reg_bg_min.jpg);background-repeat: no-repeat;width: 2880px;height: 1600px;}#Nei {border-radius:

  5. 轻松上手Matplotlib__散点图篇

    轻松上手Matplotlib__散点图篇 Matplotlib 可能是 Python 2D-绘图领域使用最广泛的套件。它能让使用者很轻松地将数据图形化,并且提供多样化的输出格式。这里将会探索 matplotlib 的常见用法。 散点图 :用两组数据构成多个坐标点,考察坐标点的分布,判断两

  6. 低成本简单易行:4G/5G网络遥控-无人车-无人船-无人机械(不用你

    低成本简单易行:4G/5G网络遥控-无人车-无人船-无人机械(不用你编程,现成系统可用) 简单易行:4G/5G网络遥控-无人车-无人机械(不用你编程,现成系统可用) 无人车,无人机械通过树莓派链接的4g/5G网卡或手机热点连接公共网络,控制端通过办公室宽带电脑接

  7. Matplotlib(一)与Matlab在绘图上的对比

    Matplotlib(一)与Matlab在绘图上的对比 一、Matplotlib Figure概述 画板上垫上画纸才能使用,而且画纸还能叠在一起。这里的。figure等效于画板,而axes/subplot则是画纸。从书包中拿出画板固定两张张画纸的过程,就相当与以下程序: fig=plt.figure() # 创

  8. c/c++ setjmp、longjmp实现,实现一个简单的协程

    c/c++ setjmp、longjmp实现,实现一个简单的协程 文章目录 1.任务切换原理 1.1 x86用户层几个关键的寄存器 1.2 逆向一个函数了解几个关键的寄存器的作用 1.2.1 32位汇编 1.2.2 64位汇编 1.3 切换实现 1.3.1 setjmp和longjmp的实现 1.4 测试切换代码 2. 协程实