Android記憶體管理

2021-06-16 10:56:11 字數 1129 閱讀 5505

low memory killer

android的low memory killer是在標準linux kernel的oom(out of memory)基礎上修改而來的一種記憶體管理機制,當系統記憶體不足時,殺死bad程序釋放其記憶體。bad程序的選擇標準有兩個:oom_adj和占用記憶體的大小。oom_adj代表程序的優先順序,數值越大,優先順序越高,對應每個oom_adj都有乙個空閒記憶體的閾值。android kernel每隔一段時間會檢查當前空閒記憶體是否低於某個閾值,如果是,則殺死oom_adj最大的bad程序,如果有兩個以上bad程序oom_adj相同,則殺死其中占用記憶體最多的程序。

oom是標準linux kernel的一種記憶體管理機制,low memory killer在它基礎上作了改進:

(1) oom基於多個標準給每個程序打分,分最高的程序將被殺死;low memory killer則用oom_adj和占用記憶體的大小來選擇bad程序.

(2) oom在記憶體分配不足時呼叫,而low memory killer每隔一段時間就會檢查,一旦發現空閒記憶體低於某個閾值,則殺死bad程序。

oom_adj/oom_score:

這兩個是與linux的oom機制有關的檔案,oom_adj相當於乙個因子,它值越大,在oom時更容易被系統kill掉,但最終決定是否被kill的是oom_score,其實計算這個oom_score時,就是根據oom_adj來的,oom_adj更大,計算出來的oom_score就更大,也能容易在oom時被系統kill掉。當然如果是很重要的服務現場,為了避免出現這種情況設定oom_adj=0就行,表示永遠不會因為oom被kill。

android將程序分為6個等級,它們按優先順序順序由高到低依次是:

3. 次要服務程序(secondary_server)

5.內容**節點(content_provider)

怎樣設定使乙個應用不被系統殺死:

對於放在

android:persistent="true"

android:label="@string/dialericonlabel"

android:icon="@drawable/ic_launcher_phone">

...

Android 記憶體管理 Environment

environment類中提供了幾個靜態常量用於標識外部儲存的狀態,這些狀態都是string型別 media bad removal 在沒有掛載前儲存 已經被移除。media checking 正在檢查儲存 media mounted 儲存 已經掛載,並且掛載點可讀 寫。media mounted ...

聊聊Android記憶體管理

聊聊對記憶體洩漏的認識?1.延時性的記憶體洩漏2.覆蓋式記憶體洩漏3.累加式記憶體洩漏沒有用的物件無法 的現象就是記憶體洩露 記憶體洩露會導致什麼後果?1.應用可用的記憶體減少,增加了堆記憶體的壓力2.降低了應用的效能,比如會觸發更頻繁的 gc3.嚴重的時候可能會導致記憶體溢位錯誤,即 oom er...

Android 記憶體管理機制

無意中在miui看到的文章,感覺不錯,轉了過來。原文如下 這種設計本來就是乙個非常好的設計,下次啟動程式時,會更快,因為不需要讀取介面資源。android系統這樣的設計不僅非常適合移動終端的需要,而且減少了系統崩潰的可能,確保了系統的穩定性。老想著清理記憶體的同學完全是因為被塞班或者windows毒...