基于昨天遇到的內(nèi)存溢出的問題,今天我決定好好的了解一下內(nèi)存溢出這個問題,然后我又打開了百度------什么是內(nèi)存泄漏......
打開了很多,看了半天云里霧里颗祝,這跟我昨天遇到的情況咋都不一樣呢,翻了半天之后看到一片知乎---內(nèi)存泄漏和內(nèi)存溢出有啥區(qū)別?我才發(fā)現(xiàn)原來我記錯了螺戳,昨天那個問題是內(nèi)存溢出hhhh搁宾,于是好奇心驅(qū)使我去了解一下這倆到底是啥以及有啥不一樣。
先說結(jié)論:
內(nèi)存溢出直白點說就是某些原因?qū)е?b>內(nèi)存不足
而內(nèi)存泄漏是不再用到的內(nèi)存倔幼,沒有及時釋放
然后百度百科說:
內(nèi)存泄漏(Memory Leak)是指程序中已動態(tài)分配的堆內(nèi)存由于某種原因程序未釋放或無法釋放盖腿,造成系統(tǒng)內(nèi)存的浪費,導(dǎo)致程序運行速度減慢甚至系統(tǒng)崩潰等嚴(yán)重后果损同,具有隱蔽性翩腐、積累性的特征。
常見于:
1. 意外的全局變量:比如函數(shù)里的變量使用未聲明(自動識別為全局變量)膏燃,或者是this直接創(chuàng)建了變量(this.sss)
2.被遺忘的計時器或回調(diào)函數(shù)?茂卦,因此一旦它們不再需要(或者關(guān)聯(lián)的對象變成不可達(dá)),一定要移除掉
3.不規(guī)范使用閉包?
避免策略:
1.減少不必要的全局變量组哩,或者生命周期較長的對象等龙,及時對無用的數(shù)據(jù)進(jìn)行垃圾回收(即賦值為null);
2.注意程序邏輯伶贰,避免“死循環(huán)”之類的 而咆;
3.避免創(chuàng)建過多的對象 原則:不用了的東西要記得及時歸還。
4.減少層級過多的引用
內(nèi)存溢出(Out Of Memory幕袱,簡稱OOM)是指應(yīng)用系統(tǒng)中存在無法回收的內(nèi)存或使用的內(nèi)存過多,最終使得程序運行要用到的內(nèi)存大于能提供的最大內(nèi)存悠瞬。此時程序就運行不了们豌,系統(tǒng)會提示內(nèi)存溢出,有時候會自動關(guān)閉軟件浅妆,重啟電腦或者軟件后釋放掉一部分內(nèi)存又可以正常運行該軟件望迎,而由系統(tǒng)配置、數(shù)據(jù)流凌外、用戶代碼等原因而導(dǎo)致的內(nèi)存溢出錯誤辩尊,即使用戶重新執(zhí)行任務(wù)依然無法避免.
要不就增加內(nèi)存,要不就清理緩存~