MAT 分析dump文件


public class OOM {
    private static List<Byte[]> list = new ArrayList<Byte[]>();
    public static void main(String[] args) {
        Zip zip = new Zip();
        zip.test(list);
    }
}
public class Zip {
    private List<Byte[]> a = null;

    public List<Byte[]> getA() {
        return a;
    }

    public void setA(List<Byte[]> a) {
        this.a = a;
    }
    public void test(List<Byte[]> list){
        Zip n = new Zip();
        n.setA(list);
        R r = new R();
        r.test1(n);
    }
}
public class R {
    public void test1(Zip z){
        while(true){
            Byte[] b = new Byte[100000];
            z.getA().add(b);
        }
    }
}

我刻意的制造了一段會溢出的代碼。

 

首先你可能需要改一下mat的配置文件。

 

 

 

 

通過下圖的leak suspects分析是可以看出gc root的。比較代碼和圖中的b a。

 

 還有其他的方式可以分析,點擊dominator tree可以獲取到持有大對象的線程,然后在其上也可以執行gcroot的分析,如下圖。

 

 

 

 

最后說的話,

實際情況沒有這么清晰的。你可能需要把gc root路徑上的每一個都點一點來尋找到底哪里發生了問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM