想了解Java内存分析工具MAT?看这里哦

news2024/12/23 6:59:34
  • MAT 简介

    MAT全称为 Eclipse Memory Analyzer Tool ,eclipse基金会开源的java堆内存分析工具,可以快速的进行堆内存分析、大对象可视化、类加载器分析、线程分析等。在我们碰到线上内存问题时候,是不可多得的好工具(当然也有arthas等国产的好工具 XD)

  • 安装

    建议下载独立安装版

    • 进入mat的下载页面

      https://eclipse.dev/mat/downloads.php
      
    • 下载后解压即可

file

  • 手把手案例

    • 创建一个项目,新建测试类

      /**
       * =====================================================================================
       *
       * @Created :   2023/9/10 14:42
       * @Compiler :  jdk 17
       * @Author :    VINO
       * @Copyright : VINO
       * @Decription :
       * =====================================================================================
       */
      public class Product {
      
          private String name;
      
          private String brand;
      
          public String getName() {
              return name;
          }
      
          public void setName(String name) {
              this.name = name;
          }
      
          public String getBrand() {
              return brand;
          }
      
          public void setBrand(String brand) {
              this.brand = brand;
          }
      }
      
      

      main方法测试类

      
      /**
       * =====================================================================================
       *
       * @Created :   2023/9/10 14:41
       * @Compiler :  jdk 17
       * @Author :    VINO
       * @Copyright : VINO
       * @Decription : 测试启动类
       * =====================================================================================
       */
      public class MockMemExample {
          /**
           * 模拟无限增长的内存
           * @param args
           */
          public static void main(String[] args) {
              List<Product> products=new ArrayList<>();
      
              while(true){
                  Product product= new Product();
                  product.setBrand("a");
                  product.setName("b");
                  products.add(product);
              }
          }
      }
      

      添加jvm参数

      -Xms24m -Xmx24m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:heapdump.hprof  
      

    file

    • jvm参数介绍

      • -Xms24m

        堆内存最小为24M

      • -Xmx24m

        堆内存最大为24M

      • -XX:+HeapDumpOnOutOfMemoryError
        内存溢出时候自动生成堆内存快照文件,其中**-XX** 表示该参数是非Stable的参数

      • -XX:HeapDumpPath=D:heapdump.hprof
        指定堆内存快照文件生成位置

  • 进行测试

    • 当运行MockExample的测试方法时,报出 Java heap space OOM错误

    • 这表示,列表存储的对象大小超了堆内存设置,众所周知,对象和数组是使用的堆内存。

    -file去看相应的堆内存快照文件,也生成了。

    • 打开MAT,将快照文件导入到MAT中,File->Open Heap Dump…
      file
      选择 Leak Suspect Report

    • file
      file
      file注意这里的 Retained size 和 Shallow Size

      • Retained size

        当对象被GC后能够释放的所有内存大小,从图上可以看到 可释放内存为14.4MB

        • Shallow Size对象自身所占用的内存大小

          对象自身所占用的内存大小

    点击Histogram 可以看到每个类的实例数量及占用内存大小

file
file

可以看到Product类的内存占用比最高

右击 Product这个类,点选 List Objects 可以看到有income和outcome 两个下拉选项

ListObjects 可以查看对象的引用关系

其中

  • with outgoing references

    本对象引用了哪些外部对象

  • with incoming references

    查看该对象被哪些外部对象引用了

​ Leak Suspect Report 报表则提供了 最大可能导致内存溢出的原因

file

file

可以看到是一个List容器装载的问题

点击 stacktrace可以看到堆栈信息

file

file

MAT的使用介绍就到这里了。

SpringBoot Learning系列 是笔者总结整理的一个SpringBoot学习集合。可以说算是一个SpringBoot学习的大集合。欢迎Star关注。谢谢观看。

file
关注公众号不迷路

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1000336.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

html的日期选择插件

1.效果 2.文档 https://layui.gitee.io/v2/docs/ 3.引入 官网地址&#xff1a; https://layui.gitee.io/v2/ 引入&#xff08;在官网下载&#xff0c;&#xff09;jquery-1.7.2.min.js,layui/layui.js **<link href"js/layui/css/layui.css" rel"stylesh…

Netty核心原理:一、基础入门-05:NettyServer收发数据

文章目录 一、前言介绍二、代码实现2.1 工程结构2.2 Netty服务端收发数据实现2.2.1 服务端处理器2.2.2 通道初始化2.2.3 netty服务端 2.3 单元测试 一、前言介绍 &#x1f4a1; 介绍服务端接收数据后&#xff0c;通过 writeAndFlush 发送 ByteBuf 字节码向客户端传输信息。 因为…

【动态规划】01背包问题

文章目录 动态规划&#xff08;背包问题&#xff09;1. 01背包2. 分割等和子集3. 目标和4. 最后一块石头的重量 || 动态规划&#xff08;背包问题&#xff09; 1. 01背包 题目链接 状态表示 dp[i][j] 表示从前i个物品当中挑选&#xff0c;总体积不超过j,所有选法当中能挑选出…

【码银送书第六期】《ChatGPT原理与实战:大型语言模型的算法、技术和私有化》

写在前面 2022年11月30日&#xff0c;ChatGPT模型问世后&#xff0c;立刻在全球范围内掀起了轩然大波。无论AI从业者还是非从业者&#xff0c;都在热议ChatGPT极具冲击力的交互体验和惊人的生成内容。这使得广大群众重新认识到人工智能的潜力和价值。对于AI从业者来说&#xf…

腾讯云4核8G12M带宽服务器支持多少人同时在线?

腾讯云轻量4核8G12M服务器配置446元一年&#xff0c;518元12个月&#xff0c;腾讯云轻量应用服务器具有100%CPU性能&#xff0c;系统盘为180GB SSD盘&#xff0c;12M带宽下载速度1536KB/秒&#xff0c;月流量2000GB&#xff0c;折合每天66.6GB流量&#xff0c;超出月流量包的流…

JavaScript学习--Day04

元字符 边界符&#xff1a; /^/&#xff1a;以什么开头 /$/&#xff1a;以什么结尾 量词&#xff1a; 预定义类&#xff1a;

用hadoop-eclipse-plugins-2.6.0来配置hadoop-3.3.6

hadoop-eclipse-plugins这个插件是Eclipse中Hadoop的插件&#xff0c;但在寻找这个插件的过程中&#xff0c;突然发现插件的版本最好与hadoop的版本的一样 但我所能找到的最新版是3.3.1的&#xff0c;试了试&#xff0c;运行有问题&#xff0c;不能用 然后又试了试自己搭对应…

PIGOSS BSM:网络大屏展现功能与特色全面解析

导语 PIGOSS BSM是一款强大的IT运维监控工具&#xff0c;提供了丰富的功能和特色。其中的“网络大屏”模块是其核心功能之一&#xff0c;能够以直观、全面的方式展示网络设备的状态信息和各种关键指标。本文将详细介绍PIGOSS BSM网络大屏的功能及特色&#xff0c;让您全面了解其…

Swift学习内容精选(一)

Swift 可选(Optionals)类型 Swift 的可选&#xff08;Optional&#xff09;类型&#xff0c;用于处理值缺失的情况。可选表示"那儿有一个值&#xff0c;并且它等于 x "或者"那儿没有值"。 Swfit语言定义后缀&#xff1f;作为命名类型Optional的简写&…

vue3项目应用font awesome6

element-plus框架的图标icon种类较少&#xff0c;一般无法涵盖所有业务情况 这时候引入font awesome6免费版&#xff0c;图标库非常丰富&#xff0c;一般可以满足所有业务场景 官网&#xff1a;https://fa6.dashgame.com/Font Awesome 6&#xff0c;一套始终绝佳的图标字体库…

快速排序(重点)

前言 快排是一种比较重要的排序算法&#xff0c;他的思想有时候会作用到个别算法提上&#xff0c;公司招聘的笔试上有时候也有他的过程推导题&#xff0c;所以搞懂快排势在必行&#xff01;&#xff01;&#xff01; 快速排序 基本思想&#xff1a; 根据基准&#xff0c;将数…

深度学习实战52-基于医疗大模型与医疗智能诊断问答的运用研究

大家好,我是微学AI,今天给大家介绍一下深度学习实战52-基于医疗大模型与医疗智能诊断问答的运用研究。医疗大模型通过收集和分析大量的医学数据和临床信息,可以辅助医生进行疾病诊断、治疗方案制定和预后评估等工作。利用医疗大模型,可以帮助医生从复杂的医学数据中提取有价…

【记一次vsan数据救援的经历】

记一次vsan数据救援的经历 1. 背景2. 事情起因&#xff1a;以下是他自述详细操作步骤&#xff1a; 事前盘点&#xff1a;救援前分析与安排第一阶段工作&#xff1a;第二阶段工作&#xff1a;针对不可访问对象分的救援阶段阶段一 &#xff1a;学习vsan 知识&#xff0c;并检查当…

CCOS 2023 | 周进院长出席会议并于多个分会场担任讲者

9月6-10日&#xff0c;由中华医学会、中华医学会眼科学分会主办&#xff0c;湖南省医学会、湖南省医学会眼科学专业委员会承办的第二十七次全国眼科学术大会(CCOS2023)将在长沙国际会议中心和长沙国际会展中心举行。 此次大会以“凝聚高质量发展共识 共筑新时代光明未来”为主题…

人工智能AI 全栈体系(一)

第一章 神经网络是如何实现的 这些年人工智能蓬勃发展&#xff0c;在语音识别、图像识别、自然语言处理等多个领域得到了很好的应用。推动这波人工智能浪潮的无疑是深度学习。所谓的深度学习实际上就是多层神经网络&#xff0c;至少到目前为止&#xff0c;深度学习基本上是用神…

Keepalived编译安装报错处理记录

一、背景 因国产化OS改造&#xff0c;对Keepalived迁移重新部署&#xff0c;现场版本比较老&#xff0c;采用2.0.6版本&#xff0c;本次迁移&#xff0c;只迁移配置文件和自启动服务&#xff1b;其他考虑环境依赖&#xff0c;在目标OS上重新编译安装。 资源链接&#xff1a;o…

数据结构题型1--头插法建立单链表

下面是可运行的代码 #include <iostream> //引入头文件 using namespace std;typedef int Elemtype;#define Maxsize 100 #define ERROR 0 #define OK 1typedef struct LNode {Elemtype data;//数据域struct LNode* next;//指针域 }LNode,* LinkList;bool InitList(…

MyBatis: 插件是怎么起作用的?

示例&#xff1a; 假如配置了PageHelper插件 public class MyBatisTest10 {public static void main(String[] args) throws IOException {SqlSessionFactory sqlSessionFactory new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.x…

iOS开发Swift-11-正向传值,搜索,反向传值,城市id获取天气,光标聚焦,拦截空白/空格字符-和风天气App次页代码

1.创建次页的controller class 在Main中选择次界面,点击左上方黄色的圈圈,将它的Custom Class中的class修改为QueryViewController. 将QueryViewController中自动生成的首页传值方法复制到ViewController中去.去掉注释符号. 2.在Main中给1页向2页传值的箭头命名为QueryVi…

怎么在树莓派上搭建WordPress博客网站,并发布到外网可访问?

文章目录 序幕概述1. 安装 PHP2. 安装MySQL数据库3. 安装 Wordpress4. 设置您的 WordPress 数据库设置 MySQL/MariaDB创建 WordPress 数据库 5. WordPress configuration6. 将WordPress站点发布到公网安装相对URL插件修改config.php配置 7. 支持好友链接样式8. 定制主题 序幕 …