`

mat 使用笔记

 
阅读更多

 

MAT 使用初探

今天线上一个应用的持久区满了,一直没有下来,导致一些服务不可用,就用jmap当出内存快照后,用MAT分析内存的基本信息,发现很多地方不会用。找了些资料记录在下来。

 

1.引用

 

  • Strong reference : 就是我们new出来的对象,但是还是被持有的应用,垃圾回收时不会回收这个应用
  • soft reference   : 我们new出来的对象,但是已经不被具体对象持有,常见的就是缓存中的对象引用,垃圾回收在内存还够的时候不会回收该部分内存信息,只有在内存不够时才会回收这块引用的对象
  • weak reference   : 当对象不在有强引用时候,垃圾回收时立刻回收。
  • Phantom reference : 不会在内存中出现,因为它一般是同ReferenceQueue一起出现,来跟踪对象是否还是保持强引用。

 

 

2.术语

shallow size:对象自身中有的内存大小 

retained size:对象自身大小 + 该对象直接或是间接引用对象的shallow size

GC Roots:所有的对象引用refer chains的起点。

 

 

以上左图中以object1来说,单独一个object1大小就是shallow size,object1及所有蓝色对象就是该对象直接或是间接引用的就是retained size。

同理右图中object4还被gc roots引用到,那么retained size就不包含这个。

 

 

 

 

 

3.实例

3.1导入一个内存文件后,用MAT打开,具体如下图所表示

 

 

3.2 details:一些基本信息

Size: 153.7 MB Classes: 331 Objects: 4.1m Class Loader: 3 Unreachable Objects Histogram

 

3.3 biggest object by retained size:显示在内存较大的对象信息

 

list objects -- with outgoing references : 查看这个对象持有的外部对象引用。

list objects -- with incoming references : 查看这个对象被哪些外部对象引用。

 

show objects by class  --  with outgoing references :查看这个对象类型持有的外部对象引用

show objects by class  --  with incoming references :查看这个对象类型被哪些外部对象引用

 

paths to gc root : 显示不同类型引用(上文中提到的Strong ,soft,weak )到跟节点的路径。

merge shorest path to gc root : 合并最短路径到root节点,这个具体没试过。

 

java basics:

    -- classloader 该对象对应的classloader信息 。

    -- thread details :线程信息

    -- thread stacks  :线程堆栈

    -- find String : 在这个对象中查询需要的字符串(还不确定,需要再搞下)

    -- group by : 根据某个字段统计出现的个数 

 

java collections:这个暂时没研究,以后再搞。

 

leak Identification -- top consumers :几个大消耗内存的对象 

 

 

3.4 可用操作

 

actions:列出每个类型的实例数及大小 。

donimator tree :列出所有对象在整个内存对象中所占百分比。比较有用。

Top Consumers: 根据类名和包名列出开销最大的对象。

Duplicate Classes: 查找出在不同classloader中加载的相同类。

 

step by step 方式

 

MAP提供了两种分析方式:

1.查找内存泄漏的方式分析内存

2.通过组件方式分析内存主要从;空对象,重复对象加载等方面。

这个在第一次加载内存文件,或者可以通过

 

 

总结:

1.首先看retained size最大的那些数据,一般看内存都是想解决内存泄漏问题,可以通过Top Consumers或者是donimator tree等actions。

2.找到最大的数据后,通过list objects -- with outgoing references 查看具体持有了哪些对象,或者通过java basics -- classloader 。查看这个是因为我们这次因为perm区满了,需要查看这个数据。到底还是哪些classloader加载了数据。

 

 

tips:

持久区中存放的数据:

  类信息,方法信息,常量池,静态变量,对于加载自己的classloader引用、interned strings(字符串驻留)

 

 

 

分享到:
评论

相关推荐

    OpenCVSharp 中遍历、修改Mat像素

    OpenCVSharp 中遍历、修改Mat像素对比 1、指针 2、GetIndexer 4、GetGenericIndexer 5、GetUnsafeGenericIndexer ..."OpenCVSharp学习笔记3--OpenCV如何扫描图像、利用查找表和计时/遍历、修改Mat像素"一文的源码

    MATLAB学习笔记 - 读取txt、mat、Excel等文件.docx

    这篇学习笔记主要涵盖了如何使用MATLAB读取不同格式的文件,包括纯文本`.txt`、`.mat`文件以及Excel文件。以下是对这些知识点的详细说明: 1. **读取纯文本 `.txt` 文件**: 使用`txtload`函数可以读取纯文本文件...

    MATLAB学习笔记 - 读取txt、mat、Excel等文件.pdf

    通过遍历文件列表,对每个 .mat 文件使用 `load` 函数,并将结果存储在一个 cell 数组中。这样可以方便地按索引访问每个数据项。 在实际应用中,你可能需要根据文件的具体结构和内容来调整这些读取方法。例如,对于...

    MATLAB学习笔记 - 读取txt、mat、Excel等文件 (2).docx

    以下将详细讲解如何使用MATLAB读取txt、mat以及Excel文件。 1. **读取纯文本文件(txt)** 在MATLAB中,可以使用`txtload`函数读取纯文本文件。例如,`txtload('test.txt')`会将`test.txt`文件的内容加载到MATLAB...

    吴恩达机器学习课后作业源码及笔记_机器学习_吴恩达_

    这份名为“吴恩达机器学习课后作业源码及笔记”的压缩包文件,无疑是针对他开设的机器学习课程的学习辅助资料。这份资料包括了课程中的习题解答以及相关的编程代码,对于正在学习或已经学过吴恩达机器学习课程的人来...

    opencv学习笔记.docx

    本文档为 OpenCV 学习笔记,涵盖了 OpenCV 库的基本使用和图像处理技术。文档分为两章,第一章介绍了图像的载入、保存和旋转操作,第二章详细介绍了图像的遍历和处理。 第一章:图像载入、保存和旋转 在 OpenCV 中...

    MATLAB学习笔记 - 读取txt、mat、Excel等文件 (2).pdf

    以下是从标题和描述中提取的关于如何在MATLAB中读取txt、mat、Excel等文件的关键知识点: 1. **读取纯文本txt文件**: 使用`load`函数可以读取纯文本的txt文件。例如,`load test.txt`会将文件`test.txt`的内容...

    陈文灯数学笔记(2)

    7. **考试策略**:对于备考研究生入学考试(如考研数学)、GRE、MAT等考试的学生,笔记中可能包含针对性的复习策略和解题技巧。 8. **解题思路**:陈文灯教授的解题方法独特,强调思路清晰、步骤严谨,能帮助读者...

    opencv3_学习笔记.pdf

    此外,还提到了初始化Mat对象时使用的类型表示方法,如CV_8UC3、CV_16SC1等,这些都是OpenCV中用于指定图像数据类型和通道数的宏。它们定义了图像中像素的数据类型和通道数量,比如CV_8UC3代表了三个通道的8位无符号...

    Matlab系列--本文根据司守奎的<数学建模算法与应用>整理写下的学习笔记.书中使用的编程软件为mat.zip

    【Matlab系列学习笔记概述】 本系列学习笔记是基于司守奎先生的著作《数学建模算法与应用》编写的,旨在深入理解并掌握Matlab这一强大的数学计算和建模工具。Matlab(Matrix Laboratory)是一款广泛应用于工程、...

    Java堆栈内存分析笔记

    本笔记将深入探讨这两个区域的工作原理以及如何进行有效的分析。 首先,我们要理解Java内存的两个主要部分:堆(Heap)和栈(Stack)。堆主要用于存储对象实例,而栈则用于存储基本类型变量和对象引用。堆内存是...

    matlab学习笔记(基础)

    当您想要将当前工作区中的变量保存以便以后使用时,通常会使用 `.mat` 文件格式。这些文件不是文本文件,而是一种二进制格式,只能通过 MATLAB 或者其他支持这种格式的软件读取。 #### 清屏命令 `clc` `clc` 命令...

    Halcon+opencv+C#连接笔记本摄像头实时采集拍照识别二维码

    在本文中,我们将深入探讨如何使用Halcon与OpenCVSharp结合C#来实现实时从笔记本摄像头采集图像并识别二维码的流程。Halcon是一种强大的机器视觉软件,它提供了丰富的图像处理函数,包括二维码识别;OpenCVSharp是...

    Opencv学习笔记

    2. 数据类型:OpenCV主要使用`cv::Mat`数据结构存储图像,这是一个高效且灵活的矩阵类,支持多种数据类型,如8位无符号整数(uchar)、32位浮点数(float)等。 3. 图像读取与显示:使用`imread()`函数读取图像,`...

    OpenCV3.2+Qt5.8.0+Win10配置和使用----打开笔记本摄像头

    在本文中,我们将深入探讨如何在Windows 10操作系统上配置和使用OpenCV 3.2与Qt 5.8.0的集成,以便能够利用笔记本的内置摄像头进行图像处理和计算机视觉应用。 首先,OpenCV(开源计算机视觉库)是一个强大的库,...

    matlab笔记.md

    根据提供的文件信息,我们可以归纳出MATLAB中的一些关键知识点,这些知识点主要涵盖了MATLAB的基本使用方法、数据类型、数学函数、变量与赋值语句、矩阵操作等方面。 ### MATLAB概述 MATLAB是一种广泛应用于工程...

    matlab个人实验笔记本之类的.zip

    本压缩包“matlab个人实验笔记本之类的.zip”包含了与MATLAB相关的个人实验笔记和一个名为“Notes_master.zip”的子文件,以及一个“说明.txt”的文本文件,可能包含了对这些笔记的详细解释或使用指南。 在MATLAB的...

    opencv基于c++个人笔记总结

    ### OpenCV 基于 C++ 的个人笔记总结 #### 环境配置与注意事项 在使用 OpenCV 进行 C++ 编程时,首先需要确保开发环境正确配置。这里提到的一些细节对于初学者来说非常重要: - **路径中斜杠的使用**:在不同的...

    Android最新面试题整理,有道云笔记格式

    5. **内存管理**:理解如何避免内存泄漏,熟悉Android内存分析工具如MAT或LeakCanary,以及如何优化内存使用。 6. **性能优化**:包括UI流畅性、后台任务管理、资源优化、代码效率提升等方面。理解ANR(Application...

Global site tag (gtag.js) - Google Analytics