溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

內(nèi)存泄漏是什么意思

發(fā)布時(shí)間:2021-06-29 16:26:51 來(lái)源:億速云 閱讀:232 作者:Leah 欄目:大數(shù)據(jù)

內(nèi)存泄漏是什么意思,針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。

1.什么是內(nèi)存泄漏?

內(nèi)存泄漏的定義: 對(duì)象不再被應(yīng)用程序使用,但是垃圾回收器卻不能移除它們,因?yàn)樗鼈冋诒灰谩?/p>

要理解這個(gè)定義,我們需要理解對(duì)象在內(nèi)存中的狀態(tài),下圖說(shuō)明了哪些是未被使用的以及哪些是未被引用的。

內(nèi)存泄漏是什么意思  

從圖中可以看到被引用的對(duì)象和未被引用的對(duì)象。未被引用的對(duì)象將會(huì)被垃圾回收器回收,而被引用對(duì)象則不會(huì)被回收。未被引用的對(duì)象理所當(dāng)然是未被使用的,因?yàn)闆](méi)有其他的對(duì)象引用它。然而,未被使用的對(duì)象并不一定是未被引用的,其中一些是被引用的。這就是內(nèi)存泄漏的起因。

2.為什么會(huì)發(fā)生內(nèi)存泄漏?

讓我們來(lái)看看下面這個(gè)例子,看看為什么內(nèi)存泄漏會(huì)發(fā)生。在如下例子中,對(duì)象A引用了對(duì)象B。A的生命周期(t1—t4)要比B的生命周期(t2—t3)長(zhǎng)很多。當(dāng)B不再用于應(yīng)用中時(shí),A仍然持有對(duì)它的引用。在這種方式下,垃圾回收器就不能將B從內(nèi)存中移除。這將可能導(dǎo)致出現(xiàn)內(nèi)存不足的問(wèn)題,因?yàn)槿绻鸄對(duì)更多的對(duì)象做同樣的事情,那么內(nèi)存中將會(huì)有很多無(wú)法被回收的對(duì)象,這將極度耗費(fèi)內(nèi)存空間。

也有可能B持有大量對(duì)其他對(duì)象的引用,這些被B引用的對(duì)象也不能夠被回收。所有這些未被使用的對(duì)象將會(huì)耗費(fèi)寶貴的內(nèi)存空間。

內(nèi)存泄漏是什么意思  

3.如何阻止內(nèi)存泄漏?

以下是一些阻止內(nèi)存泄漏的快速動(dòng)手技巧。

  • 注意集合類,例如HashMap,ArrayList,等等。因?yàn)樗鼈兪莾?nèi)存泄漏經(jīng)常發(fā)生的地方。當(dāng)它們被聲明為靜態(tài)時(shí),它們的生命周期就同應(yīng)用程序的生命周期一般長(zhǎng)。

  • 注意事件監(jiān)聽(tīng)器和回調(diào),如果一個(gè)監(jiān)聽(tīng)器已經(jīng)注冊(cè),但是當(dāng)這個(gè)類不再被使用時(shí)卻未被注銷,就會(huì)發(fā)生內(nèi)存泄漏。

  • “如果一個(gè)類管理它自己的內(nèi)存,程序員應(yīng)該對(duì)內(nèi)存泄漏保持警惕?!盵1] 很多時(shí)候當(dāng)一個(gè)對(duì)象的成員變量指向其他對(duì)象時(shí),不再使用時(shí)需要被置為null。

關(guān)于內(nèi)存泄漏是什么意思問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI