Android內(nèi)存泄漏奕翔、內(nèi)存分配的幾種策略

先給大家講一個今天看到的一個笑話:

有一人彩票中獎中了500W,記者專門對他進行了采訪浩蓉;

記者:“請問你中獎之后有什么打算嗎派继?”

“先買一套房子吧”;?

記者:“然后呢捻艳?”

“然后剩下的慢慢還”驾窟。

看了之后也是醉了,也不吐槽現(xiàn)在各地的房價了认轨,現(xiàn)在在帝都工作绅络,這個城市搞不懂,還是好好哦的敲代碼吧嘁字,昨天看到了一些東西恩急,與之前自己理解的有一些不一樣的地方,所以在這里總結(jié)下纪蜒,如果能幫到你衷恭,表示非常榮幸,要是有什么不對的或者讓你誤解的霍掺,先表示歉意匾荆。


內(nèi)存泄漏

概念:當(dāng)一個對象已經(jīng)不需要再使用了,本該被回收時杆烁,而有另外一個正在使用的對象持有它的引用從而就導(dǎo)致對象不能被回收牙丽。這種導(dǎo)致了本該被回收的對象不能被回收而停留在堆內(nèi)存中,就產(chǎn)生了內(nèi)存泄漏

內(nèi)存泄漏會造成我們僅限的內(nèi)存空間可使用的內(nèi)存越來越少兔魂,會造成應(yīng)用程序的卡頓甚至崩潰烤芦,想知道每款手機為每個app進程分配的內(nèi)存可以在AS里的Android Monitor里面的Memory中看到每個app系統(tǒng)分配的內(nèi)存空間,當(dāng)然利用Android Monitor也可以進行監(jiān)視內(nèi)存變化析校,分析內(nèi)存泄漏构罗,這些以后再說。首先我來給大家分析下內(nèi)存泄漏發(fā)生的一二三智玻。


JVM內(nèi)存分配的策略有:

1遂唧、靜態(tài)區(qū)

靜態(tài)區(qū)和我之前的理解是一樣的,內(nèi)存在程序編譯的時候就已經(jīng)分配好吊奢,這塊的內(nèi)存在程序整個運行期間都一直存在盖彭。它主要存放靜態(tài)數(shù)據(jù)、全局的static數(shù)據(jù)和一些常量页滚。

2召边、棧區(qū)

棧區(qū)和我之前的理解不太一樣,先說下我之前錯誤的理解裹驰,之前我一直以為在程序運行期間所有的基礎(chǔ)類型變量都是在棧區(qū)里面隧熙,所有的對象引用都在站里面,不過昨天我才知道自己的理解太過片面幻林,其實棧區(qū)中存儲的數(shù)據(jù)是函數(shù)(方法)在執(zhí)行時贞盯,函數(shù)一些內(nèi)部變量的存儲放在棧上面創(chuàng)建,函數(shù)執(zhí)行結(jié)束的時候這些存儲單元就會自動被釋放掉沪饺。當(dāng)然提前說一下邻悬,在方法內(nèi)部實例化的對象 即:通過new關(guān)鍵字創(chuàng)建的對象是保存在堆中,對象的引用是在棧里面随闽。等下面描述完了堆一塊給大家舉個例子父丰。

3、堆區(qū)

堆是不連續(xù)的內(nèi)存區(qū)域掘宪,堆空間比較靈活也特別大蛾扇。棧是一塊連續(xù)的內(nèi)存區(qū)域,大小是有操作系統(tǒng)覺決定的魏滚,我們所說的內(nèi)存泄漏都是發(fā)生在堆里镀首,因為棧里的數(shù)據(jù)在函數(shù)執(zhí)行完成之后已經(jīng)進行了銷毀,所以堆是出現(xiàn)內(nèi)存泄漏的地方鼠次,堆里面存放的數(shù)據(jù)就是我們new出來的東西了更哄。

舉個例子:

public class Main

{

int a=1; ?//之前一直認為是在棧里芋齿,結(jié)果想錯了,因為a屬于Main成翩,所以呀在實例化的Main對象肯定在堆里

Student s=newStudent();//引用在棧里觅捆,對象在堆里

public void XXX()

{

intb =1;//棧里面,因為是是方法內(nèi)部變量

Student s2 =newStudent(); //引用在棧里麻敌,對象在堆里

}

}

在上面的這個類里面栅炒,如果我們Main main = new Main();執(zhí)行了這句代碼之后,在內(nèi)存中main對象放在堆中术羔,main引用是在棧中赢赊,因為a這個變量是屬于main的,所以a也是在堆中级历,但是如果main.XXX()調(diào)用了該方法释移,那么b肯定在站里面,s2的引用在棧里寥殖, 對象在堆里秀鞭。

總結(jié)一下:

1.成員變量全部存儲在堆中(包括基本數(shù)據(jù)類型,引用的對象實體)---因為他們屬于類扛禽,類對象最終還是要被new出來的锋边。

2.局部變量的基本數(shù)據(jù)類型和引用存儲于棧當(dāng)中,引用的對象實體存儲在堆中编曼。-----因為他們屬于方法當(dāng)中的變量豆巨,生命周期會隨著方法一起結(jié)束。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末掐场,一起剝皮案震驚了整個濱河市往扔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌熊户,老刑警劉巖萍膛,帶你破解...
    沈念sama閱讀 222,681評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異嚷堡,居然都是意外死亡蝗罗,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評論 3 399
  • 文/潘曉璐 我一進店門蝌戒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來串塑,“玉大人,你說我怎么就攤上這事北苟∽耍” “怎么了?”我有些...
    開封第一講書人閱讀 169,421評論 0 362
  • 文/不壞的土叔 我叫張陵友鼻,是天一觀的道長傻昙。 經(jīng)常有香客問我闺骚,道長,這世上最難降的妖魔是什么妆档? 我笑而不...
    開封第一講書人閱讀 60,114評論 1 300
  • 正文 為了忘掉前任僻爽,我火速辦了婚禮,結(jié)果婚禮上过吻,老公的妹妹穿的比我還像新娘。我一直安慰自己蔗衡,他們只是感情好纤虽,可當(dāng)我...
    茶點故事閱讀 69,116評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著绞惦,像睡著了一般逼纸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上济蝉,一...
    開封第一講書人閱讀 52,713評論 1 312
  • 那天杰刽,我揣著相機與錄音,去河邊找鬼王滤。 笑死贺嫂,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的雁乡。 我是一名探鬼主播第喳,決...
    沈念sama閱讀 41,170評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼踱稍!你這毒婦竟也來了曲饱?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,116評論 0 277
  • 序言:老撾萬榮一對情侶失蹤珠月,失蹤者是張志新(化名)和其女友劉穎扩淀,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體啤挎,經(jīng)...
    沈念sama閱讀 46,651評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡驻谆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,714評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了庆聘。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片旺韭。...
    茶點故事閱讀 40,865評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖掏觉,靈堂內(nèi)的尸體忽然破棺而出区端,到底是詐尸還是另有隱情,我是刑警寧澤澳腹,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布织盼,位于F島的核電站杨何,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏沥邻。R本人自食惡果不足惜危虱,卻給世界環(huán)境...
    茶點故事閱讀 42,211評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望唐全。 院中可真熱鬧埃跷,春花似錦、人聲如沸邮利。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽延届。三九已至剪勿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間方庭,已是汗流浹背厕吉。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留械念,地道東北人头朱。 一個月前我還...
    沈念sama閱讀 49,299評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像龄减,于是被迫代替她去往敵國和親髓窜。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,870評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 前言 不知道大家有沒有這樣一種感覺,程序員的數(shù)量井噴了脖苏〕淌茫可能是因為互聯(lián)網(wǎng)火了,也可能是各家培訓(xùn)機構(gòu)為我們拉來了大量...
    活這么大就沒飽過閱讀 2,731評論 6 26
  • Android 內(nèi)存泄漏總結(jié) 內(nèi)存管理的目的就是讓我們在開發(fā)中怎么有效的避免我們的應(yīng)用出現(xiàn)內(nèi)存泄漏的問題棍潘。內(nèi)存泄漏...
    _痞子閱讀 1,639評論 0 8
  • 內(nèi)存管理的目的就是讓我們在開發(fā)中怎么有效的避免我們的應(yīng)用出現(xiàn)內(nèi)存泄漏的問題恃鞋。內(nèi)存泄漏大家都不陌生了,簡單粗俗的講亦歉,...
    DreamFish閱讀 795評論 0 5
  • 內(nèi)存管理的目的就是讓我們在開發(fā)中怎么有效的避免我們的應(yīng)用出現(xiàn)內(nèi)存泄漏的問題恤浪。內(nèi)存泄漏大家都不陌生了,簡單粗俗的講肴楷,...
    宇宙只有巴掌大閱讀 2,364評論 0 12
  • Android 內(nèi)存泄漏總結(jié) 內(nèi)存管理的目的就是讓我們在開發(fā)中怎么有效的避免我們的應(yīng)用出現(xiàn)內(nèi)存泄漏的問題水由。內(nèi)存泄漏...
    apkcore閱讀 1,222評論 2 7