教育行業(yè)A股IPO第一股(股票代碼 003032)

全國(guó)咨詢/投訴熱線:400-618-4000

內(nèi)存溢出 out of memory如何解決?[傳智播客]

更新時(shí)間:2019年09月12日17時(shí)06分 來(lái)源:傳智播客 瀏覽次數(shù):

內(nèi)存溢出 out of memory:是指程序在申請(qǐng)內(nèi)存時(shí),沒有足夠的內(nèi)存空間供其使用,出現(xiàn)out of memory;比如申請(qǐng)了一個(gè)integer,但給它存了long才能存下的數(shù),那就是內(nèi)存溢出。

memory leak會(huì)最終會(huì)導(dǎo)致out of memory!

內(nèi)存溢出就是你要求分配的內(nèi)存超出了系統(tǒng)能給你的,系統(tǒng)不能滿足需求,于是產(chǎn)生溢出。 內(nèi)存泄漏是指你向系統(tǒng)申請(qǐng)分配內(nèi)存進(jìn)行使用(new),可是使用完了以后卻不歸還(delete),結(jié)果你申請(qǐng)到的那塊內(nèi)存你自己也不能再訪問(wèn)(也許你把它的地址給弄丟了),而系統(tǒng)也不能再次將它分配給需要的程序。一個(gè)盤子用盡各種方法只能裝4個(gè)果子,你裝了5個(gè),結(jié)果掉倒地上不能吃了。這就是溢出!比方說(shuō)棧,棧滿時(shí)再做進(jìn)棧必定產(chǎn)生空間溢出,叫上溢,棧空時(shí)再做退棧也產(chǎn)生空間溢出,稱為下溢。就是分配的內(nèi)存不足以放下數(shù)據(jù)項(xiàng)序列,稱為內(nèi)存溢出.

軟件測(cè)試培訓(xùn)

內(nèi)存溢出的原因以及解決方法

引起內(nèi)存溢出的原因有很多種,列舉一下常見的有以下幾種:

1. 內(nèi)存中加載的數(shù)據(jù)量過(guò)于龐大,如一次從數(shù)據(jù)庫(kù)取出過(guò)多數(shù)據(jù);

2. 集合類中有對(duì)對(duì)象的引用,使用完后未清空,使得JVM不能回收;

3. 代碼中存在死循環(huán)或循環(huán)產(chǎn)生過(guò)多重復(fù)的對(duì)象實(shí)體;

4. 使用的第三方軟件中的BUG;

5. 啟動(dòng)參數(shù)內(nèi)存值設(shè)定的過(guò)小

內(nèi)存溢出的解決方案:

第一步,修改JVM啟動(dòng)參數(shù),直接增加內(nèi)存。(-Xms,-Xmx參數(shù)一定不要忘記加。)

第二步,檢查錯(cuò)誤日志,查看“OutOfMemory”錯(cuò)誤前是否有其它異?;蝈e(cuò)誤。

第三步,對(duì)代碼進(jìn)行走查和分析,找出可能發(fā)生內(nèi)存溢出的位置。

重點(diǎn)排查以下幾點(diǎn):

1. 檢查對(duì)數(shù)據(jù)庫(kù)查詢中,是否有一次獲得全部數(shù)據(jù)的查詢。一般來(lái)說(shuō),如果一次取十萬(wàn)條記錄到內(nèi)存,就可能引起內(nèi)存溢出。這個(gè)問(wèn)題比較隱蔽,在上線前,數(shù)據(jù)庫(kù)中數(shù)據(jù)較少,不容易出問(wèn)題,上線后,數(shù)據(jù)庫(kù)中數(shù)據(jù)多了,一次查詢就有可能引起內(nèi)存溢出。因此對(duì)于數(shù)據(jù)庫(kù)查詢盡量采用分頁(yè)的方式查詢。

2. 檢查代碼中是否有死循環(huán)或遞歸調(diào)用。

3. 檢查是否有大循環(huán)重復(fù)產(chǎn)生新對(duì)象實(shí)體。

4. 檢查對(duì)數(shù)據(jù)庫(kù)查詢中,是否有一次獲得全部數(shù)據(jù)的查詢。一般來(lái)說(shuō),如果一次取十萬(wàn)條記錄到內(nèi)存,就可能引起內(nèi)存溢出。這個(gè)問(wèn)題比較隱蔽,在上線前,數(shù)據(jù)庫(kù)中數(shù)據(jù)較少,不容易出問(wèn)題,上線后,數(shù)據(jù)庫(kù)中數(shù)據(jù)多了,一次查詢就有可能引起內(nèi)存溢出。因此對(duì)于數(shù)據(jù)庫(kù)查詢盡量采用分頁(yè)的方式查詢。

5. 檢查L(zhǎng)ist、MAP等集合對(duì)象是否有使用完后,未清除的問(wèn)題。List、MAP等集合對(duì)象會(huì)始終存有對(duì)對(duì)象的引用,使得這些對(duì)象不能被GC回收。

第四步,使用內(nèi)存查看工具動(dòng)態(tài)查看內(nèi)存使用情況


推薦了解:軟件測(cè)試課程

0 分享到:
和我們?cè)诰€交談!