首先編寫一個必然觸發 OOM 的測試類,並配置 JVM 參數自動生成堆轉儲文件:
// VM Args: -Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError
public class Heap_OOM {
public static void main(String[] args) {
List<Person> persons = new ArrayList<>();
while (true) {
persons.add(new Person());
}
}
}
class Person {}
-XX:+HeapDumpOnOutOfMemoryErrorDumping heap to java_pidXXXX.hprof ....hprof 文件

Leak Suspects Report 查看自動分析建議Histogram 中按 retained size 降序排列List Objects → Path to GC Roots → Exclude Weak/Soft/Phantom ReferencesArrayList → Object[] → Person[] 確認業務邏輯無限添加SELECT * FROM java.util.ArrayList WHERE size > 1000