Android內(nèi)存基礎(chǔ)知識

1.四種引用類型

1)強引用(Strong Reference) 就是為剛被new出來的對象所加的引用辞色,它的特點就是骨宠,生命周期長,不會因為內(nèi)存緊張而被回收淫僻。

Object obj = new Object(); // 強引用 
Object objRef = obj; // 強引用

2)軟引用(Soft Reference) 聲明為軟引用的類诱篷,是可被回收的對象壶唤,如果JVM內(nèi)存并不緊張雳灵,這類對象可以不被回收,如果內(nèi)存緊張闸盔,則會被回收悯辙。此處有一個問題,既然被引用為軟引用的對象可以回收迎吵,為什么不去回收呢躲撰?其實我們知道,Java中是存在緩存機制的击费,就拿字面量緩存來說拢蛋,有些時候,緩存的對象就是當前可有可無的蔫巩,只是留在內(nèi)存中如果還有需要谆棱,則不需要重新分配內(nèi)存即可使用快压,因此,這些對象即可被引用為軟引用垃瞧,方便使用蔫劣,提高程序性能。

Object obj = new Object(); // 強引用 
Object objRef = new SoftReference(obj); // 軟引用 
if (null != objRef) { 
obj = objRef.get(); // 獲取對象个从,如果對象已被回收脉幢,obj為null 
}

3)弱引用(Weak Reference) 弱引用的對象就是一定需要進行垃圾回收的,不管內(nèi)存是否緊張嗦锐,當進行GC時嫌松,標記為弱引用的對象一定會被清理回收。

Object obj = new Object(); // 強引用 
Object objRef = new WeakReference(obj); // 弱引用 
if (null != objRef) { 
obj = objRef.get(); // 獲取對象意推,如果對象已被回收豆瘫,obj為null 
}

4)虛引用(Phantom Reference) 虛引用弱的可以忽略不計,JVM完全不會在乎虛引用菊值,其唯一作用就是做一些跟蹤記錄外驱,輔助finalize函數(shù)的使用。

Object obj = new Object(); // 強引用 
ReferenceQueue rq = new ReferenceQueue(); 
PhantomReference objRef= new PhantomReference(obj, rq); 
objRef.get(); // always null

2.垃圾回收機制

這邊就簡單說下Android目前的垃圾回收機制腻窒。 垃圾回收機制用于回收heap中的不再使用的對象昵宇,不同的JVM,垃圾回收機制也有所不同儿子。JVM通常會使用Generation機制進行垃圾回收瓦哎,分為三代:年輕代,年老代和永久代柔逼。 一般新對象都會分派到年輕代中蒋譬,如局部對象等,大部分對象也會在年輕代中被回收愉适。年輕代中有3個內(nèi)存塊犯助,其中From和To是2個survivor內(nèi)存塊,F(xiàn)rom存放從Eden中存活下來的對象维咸,To存放從From存活下來的對象剂买,年輕代中未回收的對象會被復(fù)制到年老代中。每當內(nèi)存塊滿的時候就會進行內(nèi)存回收癌蓖,年輕代中的內(nèi)存回收只針對當前內(nèi)存塊進行回收瞬哼,年老代的內(nèi)存回收針對整個heap回收,年老代的內(nèi)存回收會比較慢租副。 經(jīng)典的垃圾回收算法是引用計數(shù)算法坐慰,iOS的OC正是采用此算法。它為每個對象添加一個引用計數(shù)器用僧,每被引用一次结胀,計數(shù)器加1两残,失去引用,計數(shù)器減1把跨,當計數(shù)器在一段時間內(nèi)保持為0時人弓,該對象就認為是可以被回收得了。但是着逐,這個算法有明顯的缺陷:當兩個對象相互引用崔赌,但是二者已經(jīng)沒有作用時,按照常規(guī)耸别,應(yīng)該對其進行垃圾回收健芭,但是其相互引用,又不符合垃圾回收的條件秀姐,因此無法完美處理這塊內(nèi)存清理慈迈,因此Dalvik并沒有采用引用計數(shù)算法來進行垃圾回收。而是采用一個叫:根搜索算法省有,如下圖:
這里寫圖片描述

基本思想就是:從一個叫GC Roots的對象開始痒留,向下搜索,如果一個對象不能到達GC Roots對象的時候蠢沿,說明它已經(jīng)不再被引用伸头,即可被進行垃圾回收(此處 暫且這樣理解,其實事實還有一些不同舷蟀,當一個對象不再被引用時恤磷,并沒有完全“死亡”,如果類重寫了finalize()方法野宜,且沒有被系統(tǒng)調(diào)用過扫步,那么系統(tǒng)會調(diào)用一次finalize()方法,以完成最后的工作匈子,在這期間河胎,如果可以將對象重新與任何一個和GC Roots有引用的對象相關(guān)聯(lián),則該對象可以“重生”旬牲,如果不可以仿粹,那么就說明徹底可以被回收了)搁吓,如上圖中的Object5原茅、Object6、Object7堕仔,雖然它們3個依然可能相互引用擂橘,但是總體來說,它們已經(jīng)沒有作用了摩骨,這樣就解決了引用計數(shù)算法無法解決的問題通贞。 GCRoot 都有哪些朗若?


1、 Class:由系統(tǒng)的類加載器加載的類對象
2昌罩、 Static Fields
3哭懈、 Thread:活著的線程
4、 Stack Local: java方法的局部變量或參數(shù)
5茎用、 JNI Local: JNI方法中的局部引用
6遣总、 JNI Global: 全局的JNI引用
7、 Monitor used: 用于同步的監(jiān)控對象


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末轨功,一起剝皮案震驚了整個濱河市旭斥,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌古涧,老刑警劉巖垂券,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異羡滑,居然都是意外死亡菇爪,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門柒昏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來娄帖,“玉大人,你說我怎么就攤上這事昙楚〗伲” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵堪旧,是天一觀的道長削葱。 經(jīng)常有香客問我,道長淳梦,這世上最難降的妖魔是什么析砸? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮爆袍,結(jié)果婚禮上首繁,老公的妹妹穿的比我還像新娘。我一直安慰自己陨囊,他們只是感情好弦疮,可當我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蜘醋,像睡著了一般胁塞。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天啸罢,我揣著相機與錄音编检,去河邊找鬼。 笑死扰才,一個胖子當著我的面吹牛允懂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播衩匣,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼累驮,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了舵揭?” 一聲冷哼從身側(cè)響起谤专,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎午绳,沒想到半個月后置侍,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡拦焚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年蜡坊,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赎败。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡秕衙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出僵刮,到底是詐尸還是另有隱情据忘,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布搞糕,位于F島的核電站勇吊,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏窍仰。R本人自食惡果不足惜汉规,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望驹吮。 院中可真熱鬧针史,春花似錦、人聲如沸碟狞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽篷就。三九已至射亏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間竭业,已是汗流浹背智润。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留未辆,地道東北人窟绷。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像咐柜,于是被迫代替她去往敵國和親兼蜈。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,914評論 2 355

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