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像素对比 1、指针 2、GetIndexer 4、GetGenericIndexer 5、GetUnsafeGenericIndexer ..."OpenCVSharp学习笔记3--OpenCV如何扫描图像、利用查找表和计时/遍历、修改Mat像素"一文的源码
Matlab系列--本文根据司守奎的<数学建模算法与应用>整理写下的学习笔记.书中使用的编程软件为mat
,
,
。。。
。。。
*.mat 文件:保存变量信息 clc 清屏命令 搜索路径操作命令: pathtool 或 editpath 打开路径设置对话框 path 或 genpath 查找搜索路径 rmpath('') 移除路径命令 addpath(path,'') 添加搜索路径,添加到搜索路径的...
dat转mat代码适用于 Mac OS X 的 MATLAB quicklook 和聚光灯插件 用于改进 MATLAB 和 Mac OS X 交互的插件。这些插件需要 Mac OS X 10.10 (Yosemite) 或更高版本。 安装 下载并解压 zip 文件后标签,将每个插件拖到...
本文实例为大家分享了OpenCV学习笔记之针对二值图像的边缘光滑处理(突出部消除),供大家参考,具体内容如下 处理代码分为两部分,第一部分用于去除边缘的突出部,第二部分用于边缘光滑。具体如下所示 1.去除边缘...
OpenGL超级宝典 笔记16-18完整的代码,作为笔记16-18的补充。包括Camera_ra.cpp和Camera_ra.h和vec34_mat4.cpp和vec34_mat4.h和3d.cpp,共5个文件
MAT6215_Dynamical_Systems 蒙特利尔大学MAT6115支持材料,2021年冬季 课程网页: : 大多数代码将采用Jupyter Python Notebook的形式。 将使用常规的科学库(即numpy,scipy,matplotlib)。 对于那些不熟悉...
数据载入、显示与保存 1 前言说明: 1 图像存储容器 2 Mat类介绍 2 Mat类基本介绍: 2 创建Mat类 2 通道: 2 Mat类构造与赋值 3 ...图像识别与处理之Opencv——Mat类_Mat类 8 2、 create()函数创建对象 10
此代码是 MATLABIO 的更新版本,支持 Mathematica v5.2 和 Matlab R2006a 下 .MAT 文件的导入/导出。 使用提供的示例 Mathematica 笔记本,在 Matlab 和 Mathematica 之间交换数字矩阵是微不足道的。 更新者: ...
CSMatIO .NET 库是完全用 C# 编写的 Microsoft .NET 2.0 架构的 Matlab MAT 文件 I/O API。 CSMatIO 能够读取、写入和操作二进制 5 级 MAT 文件。...笔记: zlib.net.dll 文件用于压缩和解压缩 MAT 文件数据。
如果没有这个语句,那么在这个命名空间的相关资源就需要带上cv前缀,如cv::Mat,表示的是使用命名空间cv中的Mat;而有了using namespace cv这个语句后,就可以直接写Mat 4. 关于颜色空间RGB顺序排列问题
在python中配置虚拟环境并安装keras,keras如何保存最佳模型。keras如何将数据保存成npz格式和mat格式,以及如何读取。适合于理工科做机器学习的同学。
Save %将所有的变量存入文件 MATLAB.mat 中 Save mydate %将所有变量存入指定文件 Save mydate x y z % 将指定的变量存入指定的文件中 2) 将数据文件的变量载入当前的工作空间 将 save 换作 load 即可
谷歌师兄的leetcode刷题笔记gaerrecords Google App Engine 数据存储区的活动记录 Gaerecords 是围绕 的轻量级包装器,提供 Active Record 和 DBO 风格的数据管理。 项目目标 初学者简单:让初学者可以轻松开始使用...
# 数据集:ex3data1.mat # 参数:ex3weights.mat