MST

星途 面试题库

面试题:Java中常见的内存泄漏检测工具及其基本使用方法

请列举至少两种Java内存泄漏的检测工具,并简要说明它们的基本使用步骤,比如如何启动工具以及查看分析结果。
15.7万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

1. VisualVM

  1. 启动工具
    • VisualVM 通常随 JDK 一起安装。在 JDK 的 bin 目录下找到 jvisualvm.exe(Windows 系统)或 jvisualvm(Linux、Mac 系统),双击启动。
    • 启动后,它会自动发现本地运行的 Java 进程。
  2. 查看分析结果
    • 选中要分析的目标 Java 进程,在“监视器”标签页可以查看内存使用情况等实时数据。
    • 切换到“线程”标签页,可分析线程状态,排查是否有线程导致的内存泄漏。
    • 点击“抽样器”标签页,选择“内存”进行采样,分析完成后,在“类”和“实例”部分可查看哪些对象占用大量内存,进而分析是否存在内存泄漏。

2. MAT(Eclipse Memory Analyzer Tool)

  1. 启动工具
    • 下载并解压 MAT 工具包。在解压后的目录中找到 MemoryAnalyzer.exe(Windows 系统)或 MemoryAnalyzer(Linux、Mac 系统),双击启动。
    • 启动后,通过“File” -> “Open Heap Dump”打开 Java 堆转储文件(.hprof 文件),可以使用 jmap -dump:format=b,file=heapdump.hprof <pid> 命令生成堆转储文件,<pid> 为目标 Java 进程的进程 ID。
  2. 查看分析结果
    • 打开堆转储文件后,MAT 会自动进行分析,并生成“Overview”页面,显示关键信息,如最大的对象、可能的泄漏点等。
    • 在“Dominator Tree”视图中,可以查看对象之间的引用关系,通过对象的大小排序,查找占用大量内存的对象及其引用链,以确定是否存在内存泄漏。
    • “Leak Suspects”报告是 MAT 自动分析生成的,会指出可能的内存泄漏疑点及相关信息,可根据此报告进一步深入分析。