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(字符串驻留)
分享到:
相关推荐
这篇学习笔记主要涵盖了如何使用MATLAB读取不同格式的文件,包括纯文本`.txt`、`.mat`文件以及Excel文件。以下是对这些知识点的详细说明: 1. **读取纯文本 `.txt` 文件**: 使用`txtload`函数可以读取纯文本文件...
OpenCVSharp 中遍历、修改Mat像素对比 1、指针 2、GetIndexer 4、GetGenericIndexer 5、GetUnsafeGenericIndexer ..."OpenCVSharp学习笔记3--OpenCV如何扫描图像、利用查找表和计时/遍历、修改Mat像素"一文的源码
通过遍历文件列表,对每个 .mat 文件使用 `load` 函数,并将结果存储在一个 cell 数组中。这样可以方便地按索引访问每个数据项。 在实际应用中,你可能需要根据文件的具体结构和内容来调整这些读取方法。例如,对于...
以下将详细讲解如何使用MATLAB读取txt、mat以及Excel文件。 1. **读取纯文本文件(txt)** 在MATLAB中,可以使用`txtload`函数读取纯文本文件。例如,`txtload('test.txt')`会将`test.txt`文件的内容加载到MATLAB...
通过源码的实践,学习者能够切实理解理论与实际操作的结合,掌握如何通过调参和使用交叉验证等技术来提高模型的性能,避免过拟合等常见问题。 而笔记部分则是对吴恩达课程内容的详细总结。笔记不仅记录了关键概念的...
本文档为 OpenCV 学习笔记,涵盖了 OpenCV 库的基本使用和图像处理技术。文档分为两章,第一章介绍了图像的载入、保存和旋转操作,第二章详细介绍了图像的遍历和处理。 第一章:图像载入、保存和旋转 在 OpenCV 中...
以下是从标题和描述中提取的关于如何在MATLAB中读取txt、mat、Excel等文件的关键知识点: 1. **读取纯文本txt文件**: 使用`load`函数可以读取纯文本的txt文件。例如,`load test.txt`会将文件`test.txt`的内容...
7. **考试策略**:对于备考研究生入学考试(如考研数学)、GRE、MAT等考试的学生,笔记中可能包含针对性的复习策略和解题技巧。 8. **解题思路**:陈文灯教授的解题方法独特,强调思路清晰、步骤严谨,能帮助读者...
此外,还提到了初始化Mat对象时使用的类型表示方法,如CV_8UC3、CV_16SC1等,这些都是OpenCV中用于指定图像数据类型和通道数的宏。它们定义了图像中像素的数据类型和通道数量,比如CV_8UC3代表了三个通道的8位无符号...
【Matlab系列学习笔记概述】 本系列学习笔记是基于司守奎先生的著作《数学建模算法与应用》编写的,旨在深入理解并掌握Matlab这一强大的数学计算和建模工具。Matlab(Matrix Laboratory)是一款广泛应用于工程、...
本笔记将深入探讨这两个区域的工作原理以及如何进行有效的分析。 首先,我们要理解Java内存的两个主要部分:堆(Heap)和栈(Stack)。堆主要用于存储对象实例,而栈则用于存储基本类型变量和对象引用。堆内存是...
当您想要将当前工作区中的变量保存以便以后使用时,通常会使用 `.mat` 文件格式。这些文件不是文本文件,而是一种二进制格式,只能通过 MATLAB 或者其他支持这种格式的软件读取。 #### 清屏命令 `clc` `clc` 命令...
在本文中,我们将深入探讨如何使用Halcon与OpenCVSharp结合C#来实现实时从笔记本摄像头采集图像并识别二维码的流程。Halcon是一种强大的机器视觉软件,它提供了丰富的图像处理函数,包括二维码识别;OpenCVSharp是...
2. 数据类型:OpenCV主要使用`cv::Mat`数据结构存储图像,这是一个高效且灵活的矩阵类,支持多种数据类型,如8位无符号整数(uchar)、32位浮点数(float)等。 3. 图像读取与显示:使用`imread()`函数读取图像,`...
在本文中,我们将深入探讨如何在Windows 10操作系统上配置和使用OpenCV 3.2与Qt 5.8.0的集成,以便能够利用笔记本的内置摄像头进行图像处理和计算机视觉应用。 首先,OpenCV(开源计算机视觉库)是一个强大的库,...
根据提供的文件信息,我们可以归纳出MATLAB中的一些关键知识点,这些知识点主要涵盖了MATLAB的基本使用方法、数据类型、数学函数、变量与赋值语句、矩阵操作等方面。 ### MATLAB概述 MATLAB是一种广泛应用于工程...
本压缩包“matlab个人实验笔记本之类的.zip”包含了与MATLAB相关的个人实验笔记和一个名为“Notes_master.zip”的子文件,以及一个“说明.txt”的文本文件,可能包含了对这些笔记的详细解释或使用指南。 在MATLAB的...
### OpenCV 基于 C++ 的个人笔记总结 #### 环境配置与注意事项 在使用 OpenCV 进行 C++ 编程时,首先需要确保开发环境正确配置。这里提到的一些细节对于初学者来说非常重要: - **路径中斜杠的使用**:在不同的...
5. **内存管理**:理解如何避免内存泄漏,熟悉Android内存分析工具如MAT或LeakCanary,以及如何优化内存使用。 6. **性能优化**:包括UI流畅性、后台任务管理、资源优化、代码效率提升等方面。理解ANR(Application...