文章插图
- All classes including platform:列举应用程序中所有类的信息 , 并快速定位内存问题 。
- Show all members of the rootset:显示堆内存中所有根对象的信息 , 包括系统对象、静态对象、本地对象等 。
- Show instance counts for all classes (including platform):显示所有类的实例数量 。
- Show heap histogram:显示程序堆内存的直方图 , 可以知道每个类的实例数量和占用内存大小等信息 , 快速知道内存泄漏原因 。
以Java_pid2680.hprof为例,进行内存分析内存泄漏原因:

文章插图
(3)MAT 是基于Eclipse的内存分析工具,是一个快速、功能丰富的Java内存分析工具,能够快速的分析出dump文件中各项结果,快速给出内存泄漏原因报告 。
还是以Java_pid2680.hprof文件进行分析,比原生的jhat方便很多,功能也比原生的更加丰富:

文章插图
MAT的一些常用功能点介绍(如图所示):
- Overview 标签内容有比较多块内容 , 其中details末块介绍总共使用内存大小,类的数量,实例的数量 , 类的加载器,以及实例的内存直方图;
- Biggest Objects by Retained Size模块,使用了饼状图列出了当前内存中占用最大的几个对象,按照百分比划分,点击不同的饼状块能够看到具体对象及其对象属性等信息;
- actions模块,这里拥有不同的分析功能 , Histogram生成视图列出每个类所对应的对象个数以及占用内存大?。?Dominator Tree生成视图寻找出大对象,每个实例对象的内存占比比重;
- Reports模块是生成报告,其中Leak Suspects可以自动分析内存泄漏主要原因报告,可以通过报告准确定位泄漏原因或者可能造成泄漏的原因 , 并且可以定位到具体累积实例,线程stack等信息 。

文章插图
四、总结本文介绍了Java程序中的内存模型,内存模型划分多份内存区域,不同区域的作用介绍及不同区域的线程之间的内存共享范围 , 可以帮助开发人员更加理解Java 中内存管理的机制和原理 。
堆是内存模型中最大的一块内存区域,以堆的空间划分详细的介绍了内存分代,部分垃圾收集器即是物理分代和逻辑分代,G1收集器则物理不分代逻辑保留了以前分代,讲述了不同收集器的原理实现和优缺点 , 可以根据项目的业务属性 , 机器配置等因素选择最优的收集器,帮助程序使用最优的收集器可以使得程序的吞吐量和响应速度达到最佳状态 。还讲述了不同的参数调优收集器,并且当发生了程序内存溢出崩溃,如何进行内存分析,介绍不同工具的使用,快速定位内存溢出的罪魁祸首,从而在代码层面上根本解决这类问题 。
推荐阅读
- Containerd容器管理
- 如何编写高性能的Java代码
- 淘宝的评价管理在哪里查看 淘宝的评价管理在哪里
- 微信授权管理在哪里怎么添加应用 微信授权管理在哪里
- 在他人土地上建厕所违反治安管理处罚法吗
- PGO 在Java应用程序中释放峰值性能:配置文件引导优化概述
- 韩国知名女模特,米兰时装周也坚持自我管理,不愧“女版金钟国”
- 酒店客房管理知识点 酒店客房管理知识
- 不良情绪的管理办法包括 不良情绪的管理办法
- 如何管理生成式AI
