网站首页 > java教程 正文
相关概念
GC Root
JVM通过可达性来判断对象的存活与否。
基本思想:以GC Roots的对象作为起始点向下搜索,搜索形成的路径称为引用链,当一个对象到GC Roots没有引用链时(不可达),则该对象判定为可回收对象,反之就不可回收对象。
GC Roots可以是以下任意对象
- 一个在CurrtentThread(当前对象)的CallStack(调用栈)上的对象,如方法参数、局部变量
- 线程自身
- SystemClassLoader(系统类加载器)加载的类
- NativeCode(本地代码)保留的活动对象
内存泄露
内存泄漏就是存在一些被分配的对象,这些对象有下面两个特点。
- 这些对象是可达的,即在有向图中,存在通路可以与其相连;
- 这些对象是无用的,即程序以后不会再使用这些对象。
如果对象满足这两个条件,这些对象就可以判定为Java中的内存泄漏,这些对象不会被GC所回收,然而它却占用内存。
强(strong)、软(soft)、弱(weak)、虚(phantom)引用
- Strong reference. 强引用。 比如new创建的对象就是强引用
- Soft reference. 软引用。GC时如果内存不足则回收
- Weak reference. 弱引用。GC时直接回收
- Phantom reference. 虚引用。 随时可能回收。用来跟踪对象回收的活动
MAT介绍
overview
内存使用情况总览
Histogram 类个数直方图
展示某个特定类的对象个数和每个对象使用的内存
可以通过正则表达式来过滤,更好的专注在关注的对象上。
Shallow Heap
Shallow Heap是指对象本身占用的内存大小,不包括它的引用对象。针对非数组类型的对象,它的大小就是对象与它所有的成员变量大小的总和。针对数组类型 的对象,它的大小是数组元素对象的大小总和。
Retained Heap
Retained Heap = 当前对象大小 + 当前对象直接或间接引用的对象的大小总和。
相当于对象被GC之后,可以从Heap上释放的内存大小。
(注:实际释放的内存大小需要根据是否有被GCRoot引用,是否可回收影响)
Retained Heap大小有两种不同的计算方式。
- Calculate Minimum Retained Size(quick approx..) 快速估算
- Calculate Precise Retained Size 精确计算
Dominator tree 支配树,对象引用关系树
如果所有指向对象Y的路径都经过对象X,则认为对象X支配对象Y。
Top Consumers 内存消耗排行
Leak Suspects 可疑泄露报告
显示MAT发现的可能导致内存泄漏的地方,和用于分析这些发现的工具和图表的链接。
MAT进阶
Immediate Dominators 查看类的支配树(直接引用)
在直方图Histogram中,可以查看特定类的支配树。
可以看到这个ShopDto实例在哪些类中引用。
Path to GC Roots 查看GC Roots引用链
- with all references 查看所有的引用链
- exclude weak references 过滤弱引用
- exclude soft references 过滤软引用
- exclude phantom references 过滤虚引用
- exclude weak/soft references 过滤弱/软引用
- exclude phantom/soft references 过滤虚/软引用
- exclude phantom/weak references 过滤虚/弱引用
- exclude phantom/weak/soft etc. references 过滤虚/弱/软引用
- exclude custom fields… 自定义过滤
List objects 查看当前Object引用,被引用对象
Show objects by class (同上,以Class的方式查看)
- with outgoing references 查看被该对象引用的对象(我引用了谁)
- with incoming references 查看引用到该对象的对象(谁引用了我)
with outgoing references 我引用了谁
wiwith incoming references 谁引用了我
Compare To Another Heap Dump 内存快照对比
Show Retained Set 查找GC是将被回收的对象集合
Collections fill ratio. 集合填充比例
查看预分配内存能力的集合,如HashMap, ArrayList的填充比例
最多使用80%,有20%的空间浪费。
Map Collision Ratio MapHash碰撞比例
猜你喜欢
- 2024-11-17 大厂贬值裁员,我却凭借Java开发进阶面试秘籍(核心版)逆流而上
- 2024-11-17 55万字!阿里内部最新最全Java面试进阶手册,能横扫99%的面试官
- 2024-11-17 JVM基础学习(jvm知识)
- 2024-11-17 「200G+」2021年5月最新·JAVA高级架构师进阶必备学习干货
- 2024-11-17 Java并发编程从入门到进阶 多场景实战
- 2024-11-17 java测试从入门到进阶(java测试从入门到进阶需要多久)
- 2024-11-17 Java进阶书单(java进阶的书)
- 2024-11-17 Java进阶反射?这其实是黑客的人肉手段啊
- 2024-11-17 Java进阶之路思维导图(java进阶教程)
- 2024-11-17 真真香!耗时大半个月收整全套「Java架构进阶pdf」没白费
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)