相信大家都見過這么一個錯誤,這個錯誤的原因是啥呢?
首先可以確定的是: 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