OutOfMemory

相信大家都見過這么一個錯誤,這個錯誤的原因是啥呢?
首先可以確定的是: jvm運行過程中出現(xiàn)的問題-內存溢出,出現(xiàn)的原因大致可以分為4個:
(1) 程序運行過程中加載了龐大的數(shù)據(jù)資源,例如一次性要讀取數(shù)據(jù)庫中很多的數(shù)據(jù),導致還沒有讀取完整就內存溢出了;
(2) 集合中有對大量對象的引用,使用完成后沒有及時釋放對象(清空對象),導致垃圾回收器沒有辦法去回收這些對象,導致內存溢出;
(3) 程序使用了死循環(huán)或者循環(huán)中產生了大量的對象實體,越積越多,導致內存溢出;
(4) jvm內存參數(shù)設置的太小

解決辦法: 首先需要定位內存溢出出現(xiàn)的位置,這里介紹一種java 內存檢測工具-mat
(1)首先我們需要對執(zhí)行的程序設置參數(shù),可以讓虛擬機在出現(xiàn)溢出內存異常時Dump出當前的內存堆轉儲快照以便時候進行分析;


image.png

下來使用這些參數(shù)來執(zhí)行你的程序,當出現(xiàn)內存溢出時,會在項目中出現(xiàn)一個xxx.hprof的文件
在使用java memory analyzer(mat)工具打開這個文件


image.png

image.png

從分析表可以看出是因為list集合add對象內存溢出了,也可以看到對象是com.hjb.java_base.section02.jvm.Bean
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容