Day14-hprof文件分析工具:mat(一)

mat介绍

mat全名:Memory Analyzer Tool。这篇要介绍的内容比较例外一点,mat这工具并不是JDK内自带的工具,而是要另外下载。JDK8以前,使用的分析工具是jhat,只是在9之後就删除了jhat工具(JEP 241: Remove the jhat Tool),改使用Oracle官方推荐的mat,也就是我们今天要介绍的主角。

下载

下载位置:Eclipse Memory Analyzer Open Source Project | The Eclipse Foundation
以下示范的作业系统:macOS Big Sur
https://ithelp.ithome.com.tw/upload/images/20210929/20140481wmoGZwW8NN.png
点击"Download"
https://ithelp.ithome.com.tw/upload/images/20210929/2014048173BD81YRvR.png
选择适合要使用的电脑作业系统版本
https://ithelp.ithome.com.tw/upload/images/20210929/20140481LBE1pqVdBJ.png
到档案下载的位置查看,直接点击进行执行
https://ithelp.ithome.com.tw/upload/images/20210929/20140481ogIEcLPiOt.png
将档案拉到Applications
https://ithelp.ithome.com.tw/upload/images/20210929/20140481VjJLB8QBcI.png
接着到Finder中,点击『应用程序』,查看是否有mat的app
https://ithelp.ithome.com.tw/upload/images/20210929/20140481jUghxlhs1T.png
针对mat的app点击右键>显示套件内容
https://ithelp.ithome.com.tw/upload/images/20210929/20140481FWLmy3MTIm.png
点击Contents资料夹>点个MacOS资料夹>点击MemoryAnalyzer,便可将应用程序开启
https://ithelp.ithome.com.tw/upload/images/20210929/20140481YggbMWgBhl.png
看到此画面表示应用程序正常开启了。
https://ithelp.ithome.com.tw/upload/images/20210929/20140481LU04o2WAtS.png
点击Files>Open Heap Dump...>选到欲分析的hprof档案(我拿上篇自动导出的auto.hprof文件示范,Day13-JDK堆内存快照工具-jmap(三)自动导出内存映像文件)
https://ithelp.ithome.com.tw/upload/images/20210929/20140481JaUG8XAoNM.png
接着它会问你要选择以下哪个常见的报吿:

  • Leak Suspects Report:查找内存泄露、系统概览
  • Component Report:分析一组对像是否存在疑似内存问题:重复字符串、空集合、终结器、弱引用等
  • Re-open previously run reports
    选择第一个Leak Suspects Report
    https://ithelp.ithome.com.tw/upload/images/20210929/20140481MFEFC17lpQ.png
    概览中可以看到最大的几个对象占比(Biggest Objects by Retained Sized),可以看到发生内存泄漏的可能
    因为我示范案例中建立的对象比较单纯,故显示的图片一个物件的占比占了几乎全部。若是实际的专案,则不会这麽简单
    https://ithelp.ithome.com.tw/upload/images/20210929/2014048141fToWnTtR.png
    default_report下面有块黄色的区块,可以看到问题的嫌疑点在哪,点击『see stacktrace』
    https://ithelp.ithome.com.tw/upload/images/20210929/20140481ytpk5Ln0WN.png

心得

透过这方式便能快速找到造成内存泄漏的问题了!使用这工具才不会在遇到OOM时就好像大海捞针的感觉~
mat工具还有多有用的讯息可以查看,在接下来会继续介绍~


<<:  ScrollView的Contentoffset解析 Day25

>>:  [Day29] BERT(二)

Day5 State vs Props

前言 State跟Props这两个东西其实不会很难,却很重要,基本上你在写React的日子里都会一直...

CSS文字样式相关属性(DAY11)

今天这篇文章会介绍CSS文字大小、文字粗细、字体和字型,这些都是有关文字样式的相关属性: 文字大小 ...

Proxmox VE 虚拟机防火墙管理 (二)

当我们已经开始使用防火墙规则管理连出入的网路传输时,随着制订规则数目越来越多,在管理上就会遇到开始...

33岁转职者的前端笔记-DAY 17 Bootstrap 介绍及使用方法

什麽是 Bootstrap ? 是一个框架系统 是一个UI的框架 (framework) 已提供现成...

MySQL学习_Day3

学习内容 资料型态、取得资料 简介 资料型态(Data Type),又称资料类型或资料型别,是用来约...