因此,memory leak會最終會導致out of memory!
內存溢出就是你要求分配的內存超出了系統(tǒng)能給你的,系統(tǒng)不能滿足需求,于是產(chǎn)生溢出。
內存泄漏是指你向系統(tǒng)申請分配內存進行使用(new),可是使用完了以后卻不歸還(delete),結果你申請到的那塊內存你自己也不能再訪問(也許你把它的地址給弄丟了),而系統(tǒng)也不能再次將它分配給需要的程序。一個盤子用盡各種方法只能裝4個果子,你裝了5個,結果掉倒地上不能吃了。這就是溢出!比方說棧,棧滿時再做進棧必定產(chǎn)生空間溢出,叫上溢,棧空時再做退棧也產(chǎn)生空間溢出,稱為下溢。就是分配的內存不足以放下數(shù)據(jù)項序列,稱為內存溢出.
引起內存溢出的原因有很多種:
1.內存中加載的數(shù)據(jù)量過于龐大,如一次從數(shù)據(jù)庫取出過多數(shù)據(jù); 2.集合類中有對對象的引用,使用完后未清空,使得JVM不能回收; 3.代碼中存在死循環(huán)或循環(huán)產(chǎn)生過多重復的對象實體; 4.使用的第三方軟件中的BUG; 5.啟動參數(shù)內存值設定的過小
內存溢出的解決方案:
第一步,修改JVM啟動參數(shù),直接增加內存。(-Xms,-Xmx參數(shù)一定不要忘記加。)
第二步,檢查錯誤日志,查看“OutOfMemory”錯誤前是否有其它異常或錯誤。
第三步,對代碼進行走查和分析,找出可能發(fā)生內存溢出的位置。
新聞熱點
疑難解答