Memory Analyzer分析記憶體洩漏
模拟一次記憶體溢出
- 程式不斷地向ArrayList添加對象,直至溢出
public class User {
String userName;
String passWord;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
}
import java.util.ArrayList;
import java.util.List;
public class jvmMemoryOut {
public static void main(String[] args) {
List<Object> listObject = new ArrayList<>();
for (int i = 0; i < 100000; i++) {
System.out.println("i:" + i);
User user = new User();
user.setUserName("小明");
user.setPassWord("123456");
listObject.add(user);
}
System.out.println("添加成功...");
}
}
- VM設定
-Xms1m -Xmx2m -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=C:\Users\0096001939\Desktop\dump

3. 運作後獲得dump檔案
Memory Analyzer打開dump檔案
- 檢視到概覽,然後我們打開details
Memory Analyzer分析記憶體洩漏Memory Analyzer分析記憶體洩漏 - 通過details我們看到多個user在一個list中,撐爆了記憶體
Memory Analyzer分析記憶體洩漏Memory Analyzer分析記憶體洩漏 - 檢視user所線上程的詳情.
Memory Analyzer分析記憶體洩漏Memory Analyzer分析記憶體洩漏