面试题答案
一键面试1. VisualVM
- 启动工具:
- VisualVM 通常随 JDK 一起安装。在 JDK 的
bin
目录下找到jvisualvm.exe
(Windows 系统)或jvisualvm
(Linux、Mac 系统),双击启动。 - 启动后,它会自动发现本地运行的 Java 进程。
- VisualVM 通常随 JDK 一起安装。在 JDK 的
- 查看分析结果:
- 选中要分析的目标 Java 进程,在“监视器”标签页可以查看内存使用情况等实时数据。
- 切换到“线程”标签页,可分析线程状态,排查是否有线程导致的内存泄漏。
- 点击“抽样器”标签页,选择“内存”进行采样,分析完成后,在“类”和“实例”部分可查看哪些对象占用大量内存,进而分析是否存在内存泄漏。
2. MAT(Eclipse Memory Analyzer Tool)
- 启动工具:
- 下载并解压 MAT 工具包。在解压后的目录中找到
MemoryAnalyzer.exe
(Windows 系统)或MemoryAnalyzer
(Linux、Mac 系统),双击启动。 - 启动后,通过“File” -> “Open Heap Dump”打开 Java 堆转储文件(
.hprof
文件),可以使用jmap -dump:format=b,file=heapdump.hprof <pid>
命令生成堆转储文件,<pid>
为目标 Java 进程的进程 ID。
- 下载并解压 MAT 工具包。在解压后的目录中找到
- 查看分析结果:
- 打开堆转储文件后,MAT 会自动进行分析,并生成“Overview”页面,显示关键信息,如最大的对象、可能的泄漏点等。
- 在“Dominator Tree”视图中,可以查看对象之间的引用关系,通过对象的大小排序,查找占用大量内存的对象及其引用链,以确定是否存在内存泄漏。
- “Leak Suspects”报告是 MAT 自动分析生成的,会指出可能的内存泄漏疑点及相关信息,可根据此报告进一步深入分析。