Android GC 學習筆記

閱讀的文章:Android GC 原理探究

下面補充一些備注和筆記。

算法

復制算法 (Copying)圖示:

這里寫圖片描述

標記-壓縮算法 (Mark-Compact)英文描述:
mark-compact
總結起來就是
標記 —> 壓縮有用的對象到一端 —> 回收此端外剩下的空間
圖示:

這里寫圖片描述

可以看出捌浩,這兩種算法都可以減少內(nèi)存碎片

GC Roots

英文官方說明:


The root kinds are:

  • Class - class loaded by system class loader. Such classes can never be unloaded. They can hold objects via static fields. Please note that classes loaded by custom class loaders are not roots, unless corresponding instances of java.lang.Class happen to be roots of other kind(s).
  • Thread - live thread
  • Stack Local - local variable or parameter of Java method
  • JNI Local - local variable or parameter of JNI method
  • JNI Global - global JNI reference
  • Monitor Used - objects used as a monitor for synchronization
  • Held by JVM - objects held from garbage collection by JVM for its purposes. Actually the list of such objects depends on JVM implementation. Possible known cases are: the system class loader, a few important exception classes which the JVM knows about, a few pre-allocated objects for exception handling, and custom class loaders when they are in the process of loading classes. Unfortunately, JVM provides absolutely no additional detail for such objects. Thus it is up to the analyst to decide to which case a certain "Held by JVM" belongs.

If an object is a root, it is specially marked in all views showing individual objects.
中文

為什么GC會引起應用暫停(STW Stop The World)

因為gc需要確保標記準確無誤担神,所以不可能一邊標記馅笙,一邊還有創(chuàng)建和銷毀對象的活動卒密,只能是暫定所有線程忌锯,等標記和清理完成后恢復所有線程。

弱引用(soft reference)

Android性能提升之強引用漩氨、軟引用西壮、弱引用、虛引用使用

可以應用到安卓開發(fā)中的tips

  • 我們首先要盡量避免掉頻繁生成很多臨時小變量(比如說:getView叫惊,onDraw等函數(shù))款青,以減少gc頻率和內(nèi)存碎片。
    另外霍狰,又要盡量去避免產(chǎn)生很多長生命周期的大對象抡草,減少老年代執(zhí)行gc的次數(shù)。 Old GC的速度一般會比Young gc慢10倍以上蚓耽。并且執(zhí)行"標記-壓縮算法"渠牲,標記和壓縮階段都會暫停應用,造成較長時間的STW步悠。
    (復制算法是用空間換時間签杈,標記-壓縮算法是用時間換空間)

  • 也可以注冊一個應用不可見(比如鎖屏,被放到后臺)的生命周期回調(diào)鼎兽,主動觸發(fā)gc, 因為反正應用不可見答姥,GC 下以便之后運行更流暢,不過只是設想谚咬,還沒實驗鹦付。

  • 作者也說了,本來想故意“生成一些幾百K的對象择卦,試圖去擴大可用堆大小的時候敲长,反而會導致頻繁的GC郎嫁,因為這些對象的分配會導致GC,而GC后會讓堆內(nèi)存回到合適的比例祈噪,而我們使用的局部變量很快會被回收理論上存活對象還是那么多泽铛,我們的堆大小也會縮減回來無法達到擴充的目的”此路不通。
最后編輯于
?著作權歸作者所有,轉載或內(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
  • 正文 為了忘掉前任,我火速辦了婚禮缩搅,結果婚禮上越败,老公的妹妹穿的比我還像新娘。我一直安慰自己硼瓣,他們只是感情好究飞,可當我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著堂鲤,像睡著了一般亿傅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上瘟栖,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天葵擎,我揣著相機與錄音,去河邊找鬼半哟。 笑死酬滤,一個胖子當著我的面吹牛签餐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播敏晤,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼贱田,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了嘴脾?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 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)自己被綠了樟插。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片韵洋。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖黄锤,靈堂內(nèi)的尸體忽然破棺而出搪缨,到底是詐尸還是另有隱情,我是刑警寧澤鸵熟,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布副编,位于F島的核電站,受9級特大地震影響流强,放射性物質發(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)容