JVM內存溢出的定位與分析


一、初步認識

 

 

 

二、模擬內存溢出
  2.1 ~ 編寫測試類:TestJvmOutOfMemory。
編寫代碼,向List集合中添加100萬個字符串,每個字符串由1000個UUID組成。
如果程序能夠正常執行,最后打印ok。

package cn.itcast.jvm;

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

public class TestJvmOutOfMemory {

    public static void main(String[] args) {
        List<Object> list = new ArrayList<>();
        for (int i = 0; i < 10000000; i++) {
            String str = "";
            for (int j = 0; j < 1000; j++) {
                str += UUID.randomUUID().toString();
            }
            list.add(str);
        }
        System.out.println("ok");
    }
    
}

 

 

 

  2.2 ~ 在 VM potions中設置參數。

 

 

 

 

-Xms8m -Xmx8m -XX:+HeapDumpOnOutOfMemoryError
 

 

三、運行測試

 

 

 

 

四、導入到MAT工具中進行分析
  4.1 ~ 看圖觀察。
  

 

 

分析:
…
可以看到,有91.03%的內存由Object[]數組占有,所以比較可疑。
…
分析:這個可疑是正確的,因為已經有超過90%的內存都被它占有,這是非常有可能出現內存溢出的。

 

  4.2 ~ 查看詳情。

 

 

 

至此,實戰:內存溢出的定位與分析完成。

原文鏈接:https://blog.csdn.net/weixin_42464054/article/details/90938451


免責聲明!

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



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