Eclipse Memory Analyzer是一个非常棒的堆内存分析工具,是JDK自带的堆分析工具jhat的一个非常好的替代品,能够快速地定位Java内存泄露的原因。
可能有的同学会问,JVM不是号称自动内存管理,GC会自动垃圾回收,Java怎么会有内存泄露,不会搞错吧?当然不会^_^, Java的内存泄露不同于C/C++的内存泄露,C/C++的内存泄露是由于使用了堆内存(new/malloc)却没有释放(delete/free),导致无法再使用到该内存片,而Java的内存泄露是无谓地引用了一些垃圾的对象,譬如我们有一个Map对象,不断往里面放对象,实际的场景可能是这些对象不会再被使用到,这时候,这部分数据本身是垃圾的(因为不会再被使用),但实际上JVM会不会释放它(因为还被Map)引用着,这就是Java的内存泄露。
在开始分析之前,我们先想想,在编程这个角度上,我们如何避免堆内存泄露呢?实际上java.lang.ref这个包已经为我们提供了一种问题解决方案。Java的引用有4种:强引用(Strong Reference)、软引用(Soft Reference)、弱引用(Weak Reference)、幻影引用(Phantom Reference),关于这部分介绍的文章一大批,此处就不做深入,我们只需要知道如下的信息:
- 强引用:除非将引用置为null,否则JVM不会对它垃圾,这是最常用的引用方式
- 软引用:在堆内存不足的时候,GC会将其垃圾回收
- 弱引用:每次GC都会将其垃圾回收
- 幻影引用:跟没有引用一样,每次获得的都是空的,没有太多使用的意义,仅是为了追踪对象在JVM的状态
一般对于大数据量的Cache信息或大对象,使用软引用/弱引用是一种非常好的习惯,或者至少使用一种淘汰算法,避免在堆内存拥挤大量的对象导致内存不足,如下是两个非常好的JDK默认提供的HashMap替代者:
- org.apache.commons.collections.map.ReferenceMap:支持强引用/软引用和弱引用来存储key/value对
- org.apache.commons.collections.map.LRUMap:可以控制总容量,采用LRU淘汰算法,将不常使用的数据淘汰出去
介绍完一些背景,我们开始进入主题。在开始分析之前,我们需要先dump下JVM的堆内存信息(虽然Eclipse Memory Analyzer直接attach到JVM上获取栈再分析,实际应用价值不大)
jmap –dump:file=test.bin {pid}
现在我们有了test.bin这个堆文件,使用Eclipse Memory Analyzer打开,分析完堆,我们可以选择“Leak Suspects Report”进行内存泄露分析。通过这个视图,我们可以大概得到内存泄露的初步结论
Historygram也是一个非常常用的视图,可以获得堆中对象的数据统计,有排序、过滤的功能,非常好用
Eclipse Memory Analyzer还包括如下功能:
- 在Historygram视图中右击对象弹出的功能框中,可以获得对象相互引用的关系的功能
- Dominator Tree的视图采用Tree的方式来展现整个栈对象相互引用的情况
- OQL视图支持使用OQL语言来查询对象信息
- 还有其他功能有待发掘^_^
Eclipse Memory Analyzer真的是一个非常棒的工具,应该成为每个Java程序员手头的必备工具。
分享到:
相关推荐
Eclipse Memory Analyzer 是一个功能丰富且轻量的 Java 堆内存分析工具,可以用来辅助发现内存泄漏减 少内存占用。 使用 Memory Analyzer 来分析生产环境的 Java 堆转储文件,可以从数以百万计的对象中快速计算出对 ...
Eclipse Memory Analyzer(MAT)是一款强大的Java内存分析工具,它被广泛用于诊断和解决Java应用程序中的内存泄漏问题。MAT 1.8.1是适用于macOS的特定版本,旨在帮助开发者深入理解并优化他们的Java应用内存使用情况...
点到 Y 的所有路径都必须经过 X。➢根对象(root objects...通过深入理解和熟练运用这些知识点,你可以有效地利用 Eclipse Memory Analyzer 工具,诊断和解决 Java 应用程序中的内存泄漏问题,提高系统的稳定性和性能。
Eclipse Memory Analyzer,通常简称为MAT(Memory Analyzer Tool),是一款由Eclipse基金会开发的强大内存分析工具,主要用于诊断Java应用程序的内存泄漏和优化内存使用。它提供了深入的heap dump分析,帮助开发者...
Eclipse Memory Analyzer(MAT,全称Memory Analyzer Tool)是一款强大的Java内存分析工具,尤其在Mac平台上,它提供了独立于Eclipse环境的版本,方便开发者直接使用。MAT的主要目标是帮助开发者诊断和解决Java应用...
《Eclipse Memory Analyzer》中文文档是一份详尽的指南,主要针对Java开发人员,特别是那些在处理内存管理和优化方面遇到挑战的开发者。这份文档共有93页,旨在帮助用户理解和利用MAT (Memory Analyzer Tool)有效地...
本文将详细介绍如何利用 Eclipse Memory Analyzer (MAT) 工具来诊断并解决 Tomcat 服务器上的 Java 应用程序内存溢出问题。 #### 二、内存溢出的原因及处理思路 ##### 2.1 内存泄露 - **定义**:内存泄露是指不再...
Eclipse Memory Analyzer(内存分析器)是一款专门为Java堆内存分析而设计的工具,它可以协助开发者快速地分析内存泄漏问题,通过生成的报告指出潜在的内存泄漏可疑点。Memory Analyzer可以单独使用,也可以作为...
标题“EclipseMemoryAnalyzer-x86_64”表明这是一款针对x86_64(64位)架构的Eclipse Memory Analyzer工具。这通常意味着该版本可以运行在64位的操作系统上,例如Windows、Linux或macOS。同时,“MemoryAnalyzer-1.7...
总之,Eclipse Memory Analyzer是Java开发者诊断内存问题不可或缺的工具,它通过丰富的视图和报告,使复杂的内存分析变得直观易懂,帮助开发者优化内存管理,提高应用的稳定性和性能。通过熟练掌握MAT,开发者可以...
MAT(Memory Analyzer Tool)是Eclipse项目开发的一款强大的Java内存分析工具,主要用于诊断Java应用程序的内存泄漏和性能问题。在标题中提到的“Eclipse Memory Analyzer Version 1.7.0.rar”是一个压缩包,其中...
总的来说,Eclipse Memory Analyzer是一款强大的工具,它能帮助Java开发者深入剖析内存问题,找出潜在的内存泄漏,提高应用性能。熟练掌握MAT的使用,对于任何Java开发者的技能提升都至关重要。通过不断实践和学习,...
在这个"MAT Eclipse MemoryAnalyzer java性能分析"主题中,我们将深入探讨MAT的核心功能、使用方法以及如何通过它来提升Java应用的性能。 MAT提供了丰富的视图和功能,帮助开发者识别内存问题。其中,最重要的可能...
Eclipse Memory Analyzer(MAT)是一款强大的Java虚拟机(JVM)内存分析工具,它能够帮助开发者定位并解决Java应用程序中的内存泄漏问题。MAT通过解析.hprof文件,即Java虚拟机生成的内存快照,来展示堆内存的详细...
资源名称:Eclipse Memory...Eclipse Memory Analyzer是一个快速而功能丰富的Java堆分析器,可帮助您查找内存泄漏并减少内存消耗。 这个版本是支持jdk11的,上一个1.11的版本是jdk1.8的。收大家分就是因为下载比较难搞。
总之,Eclipse Memory Analyzer是Java开发者不可或缺的工具,它提供了深入的内存分析功能,帮助优化应用程序性能,预防和解决内存泄漏问题。熟练掌握MAT的使用,对于提升Java应用的稳定性和效率具有重大意义。
Eclipse Memory Analyzer(MAT)是一款强大的Java内存分析工具,它能帮助开发者诊断和解决与内存泄漏、内存占用过高以及垃圾收集性能问题相关的问题。在Java应用程序中,如果内存管理不当,可能会导致系统运行缓慢,...
MemoryAnalyzer主要用于分析jvm运行过程中导致内存溢出、内存泄漏的工具,MemoryAnalyzer主要用于分析jvm运行过程中导致内存溢出、内存泄漏的工具,MemoryAnalyzer主要用于分析jvm运行过程中导致内存溢出、内存泄漏...
Memory Analyzer Tool(MAT)工具是 eclipse 的一个插件(MAT 也可以单独使用),它分析大内存的 dump 文件时,可以非常直观的看到各个对象在堆空间中所占用的内存大小、类实例数量、对象引用关系、利用 OQL 对象查询,...