分析工具:
jprofiler
官网 收费
Java Profiler - JProfiler
jprofiler 提供了简单易用的UI界面,帮助解决性能问题,确定内存泄漏,解决线程问题。
只有准备好了 优秀的工具,才是足够好。
可以看出,jprofiler 的定位:是一款 简单好用的 内存分析工具。
jprofiler 可以看到实施的内存、GC、CPU、线程的活动状态,UI界面也比较友好。就是 收费。
jvisualvm.exe、jconsole.exe
这两是 JDK自带的 内存检测工具。只是 UI界面 不太友好。
jprofiler 可以算是 这两的 升级版本。
MAT Memory Analyzer Tool
下载地址:
Eclipse Memory Analyzer Open Source Project | The Eclipse Foundation
分析 JVM dump 文件 最好的工具。他可以 根据 dump文件 ,提示出 可能存在的问题,比如 哪些对象占用过多,并且可以分析出这些过多内存的 引用路径,对于分析问题 非常有帮助
注意事项:
1. jprofiler 实时内存 显示的对象 个数,是包含 存活对象和非存活对象的。 如果对象引用不可达,但是此时 没有发生GC时,也会被统计到对象个数中。
跟 jmap -histo pid 统计的数据一致。
2. jvisualvm.exe 工具自带了一个 dump按钮,如果点击了 Dump按钮,会触发一次GC活动
3. MAT Memory Analyzer Tool 分析工具,分析的dump文件,可能是只包含存活对象。
就目前知道的 jmap -dump 命令 生成的 dump 文件,是只包含存活对象,即使 不存活的对象没有被GC回收,也不会输出到dump文件
所以,如果JVN内存占用过多,可能是 GC 没有触发,导致 引用不可达的对象 没有及时被回收。如果 用 jprofiler 分析问题的话,需要关注 GC 活动情况