Eclipse Memory Analyzer是Eclipse官方提供的用于分析JVM堆栈信息的工具
1,加载dump文件
加载完后选择Leak Suspects,会列出堆中占用比较大的可达对象,看到内存泄漏的可疑点以及细节信息,然后需要对实际代码进行分析,确认内存泄漏问题
查看OverView
datails中的Unreachable Objects Histogram可以查看不可达对象
Biggest Objects by Retained Size包含几个比较大对象,如果没有对象超过1%则忽略
2,查看泄漏报告Leak Suspect Report
一种是单个大对象导致泄漏,可以在dominator tree中排序
一种是有大量同类型对象泄漏,在dominator tree中使用类分组排序
泄漏嫌疑是线程时,会展示调用堆栈以及相关的栈帧和局部变量
3,大对象视图
菜单点击Query Browser > Leak Identification > Top Consumer,用于查看对象/类加载器/包的最大对象与饼图
4,寻找责任对象
在Histogram中选择对象右键Immediate Dominators,可查看在类级别上支配给定对象集的所有对象,它直接回答了“谁让这些对象保持活动状态”的问题,而不是“谁引用了这些对象”,利用每个对象只有一个直接支配者的事实,该工具可以过滤无用的支配者(例如java.*类),并直接查看负责的应用程序类。
5,类加载器分析
点击 Query Browser > Java Basics > Class Loader Explorer查看类加载器信息,可用于分析元空间占用过大问题。
类加载器将类装入JVM的内存中。在分析堆时,类加载器非常重要,原因有两个:第一,应用程序通常使用单独的类加载器加载组件。其次,加载的类通常存储在一个单独的空间(例如perm空间)中,该空间也可以被耗尽。
该表包含定义的类和活动实例的数量。如果一个类被多次加载,活动实例的数量可以指示哪个类加载程序更活跃,哪个应该被垃圾收集掉。
6,线程分析
一些堆转储文件包含有关线程的调用堆栈以及每个栈帧的Java本地对象的信息,可以分析线程的保留堆。
7,java集合使用分析
在工具栏点击Open Query Browser > Java Collections
Array Fill Ratio 打印数组的填充率,填充率是数组中非空元素的比例。
Arrays Grouped by Size Query 按大小分组的给定数组的分布直方图。
Collection Fill Ratio Query 打印给定集合填充率的频率分布。
Collections Grouped By Size Query 给定集合按大小的分布直方图。
Extract List Values Query 列出单个LinkedList、ArrayList、Vector、CopyOnWriteArrayList、PriorityQueue、ArrayQueue对象的元素。
Hash Entries Query 从哈希映射和哈希表中提取键值对。
Extract Hash Set Values Query 列出单个哈希集的元素。
Map Collision Ratio Query 打印类map集合的碰撞率的频率分布
8,终止器分析
在工具栏点击Open Query Browser > Java Basics > Finalizer Overview,终结器在内部垃圾收集清理对象时执行。因为只有在finalize方法完成时才能释放内存,所以finalizer中长时间运行的任务可能会阻止垃圾收集。
In processing by Finalizer Thread 提取终结器线程当前处理的对象。
Ready for Finalizer Thread 此查询按处理顺序显示准备完成的对象。
Finalizer Thread 此查询显示执行对象终结的守护进程线程。
Finalizer Thread Locals 此查询显示执行对象终结的守护进程线程的线程局部变量。
(*^▽^*)如对你有帮助,欢迎点赞与收藏哦