天天看點

Memory Analyzer分析記憶體洩漏Memory Analyzer分析記憶體洩漏

Memory Analyzer分析記憶體洩漏

模拟一次記憶體溢出

  1. 程式不斷地向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("添加成功...");
    }
}
           
  1. VM設定
-Xms1m -Xmx2m -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=C:\Users\0096001939\Desktop\dump
           
Memory Analyzer分析記憶體洩漏Memory Analyzer分析記憶體洩漏

3. 運作後獲得dump檔案

Memory Analyzer分析記憶體洩漏Memory Analyzer分析記憶體洩漏

Memory Analyzer打開dump檔案

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