導航:首頁 > 操作系統 > 安卓手機如何打開lmk文件

安卓手機如何打開lmk文件

發布時間:2023-03-12 14:34:43

㈠ Android系統內存管理

部分內容出至林學森的Android內核設計思想。
Android官網內存管理
部分出至 https://www.jianshu.com/p/94d1cd553c44

Android本質是Linux所以先從Linux說起。

Linux的內存管理為系統中所有的task提供可靠的內存分配、釋放和保護機制。
核心:
虛擬內存
內存分配與釋放
內存保護

將外存儲器的部分空間作為內存的擴展,如從硬碟劃出4GB大小。
當內存資源不足時,系統按照一定演算法自動條形優先順序低的數據塊,並把他們存儲到硬碟中。
後續如果需要用到硬碟中的這些數據塊,系統將產生「缺頁」指令,然後把他們交換回內存中。
這些都是由操作系統內核自動完成的,對上層應用」完全透明「。

每個進程的邏輯地址和物理地址都不是直接對應的,任何進程都沒辦法訪問到它管轄范圍外的內存空間——即刻意產生的內存越界與非法訪問,操作系統也會馬上阻止並強行關閉程序,從而有力的保障應用程序和操作系統的安全和穩定。

一旦發現系統的可用內存達到臨界值,機會按照優先順序順序,匆匆低到高逐步殺掉進程,回收內存。
存儲位置:/proc/<PID>/oom_score
優先順序策略:
進程消耗的內存
進程佔用的CPU時間
oom_adj(OOM權重)

Android平台運行的前提是可用內存是浪費的內存。它試圖在任何時候使用所有可用的內存。例如,系統會在APP關閉後將其保存在內存中,以便用戶可以快速切換回它們。出於這個原因,Android設備通常運行時只有很少的空閑內存。在重要系統進程和許多用戶應用程序之間正確分配內存內對存管理是至關重要。
Android有兩種主要的機制來處理低內存的情況:內核交換守護進程(kernel swap daemon)和低內存殺手(low-memory killer)。

當用戶在APP之間切換時,Android會在最近使用的(LRU)緩存中保留不在前台的APP,即用戶看不到的APP,或運行類似音樂播放的前台服務。如果用戶稍後返回APP,系統將重用該進程,從而使APP切換更快。
如果你的APP有一個緩存進程,並且它保留了當前不需要的內存,那麼即使用戶不使用它,你的APP也會影響系統的整體性能。由於系統內存不足,它會從最近使用最少的進程開始殺死LRU緩存中的進程。該系統還負責處理佔用最多內存的進程,並可以終止這些進程以釋放RAM。
當系統開始終止LRU緩存中的進程時,它主要是自底向上工作的。系統還考慮哪些進程消耗更多的內存,從而在終止時為系統提供更多的內存增益。你在LRU列表中消耗的內存越少,你就越有可能留在列表中並能夠快速恢復。

為了滿足RAM的所有需求,Android嘗試共享RAM來跨進程通信。它可以做到以下方式:

Android設備包含三種不同類型的內存:RAM、zRAM和storage。
注意:CPU和GPU都訪問同一個RAM。

內存被拆分成頁。通常每頁有4KB的內存。
頁面被認為是空閑的或已使用的。
空閑頁是未使用的RAM。
已使用頁是系統正在積極使用的RAM,分為以下類別:

干凈的頁面(Clean pages)包含一個文件(或文件的一部分)的一份精確副本存在存儲器上。當一個干凈的頁面不再包含一個精確的文件副本(例如,來自應用程序操作的結果)時,它就變成了臟頁。可以刪除干凈的頁,因為它們始終可以使用存儲中的數據重新生成;不能刪除臟頁(Dirty pages),否則數據將丟失。

內核跟蹤系統中的所有內存頁。

當確定一個應用程序正在使用多少內存時,系統必須考慮shared pages。APP訪問相同的服務或庫將可能共享內存頁。例如,Google Play Services 和一個游戲APP可能共享一個位置服務。這使得很難確定有多少內存屬於這個服務相對於每個APP。

當操作系統想要知道所有進程使用了多少內存時,PSS非常有用,因為頁面不會被多次計數。PSS需要很長時間來計算,因為系統需要確定哪些頁面是共享的,以及被有多少進程。RSS不區分共享頁面和非共享頁面(使計算速度更快),更適合於跟蹤內存分配的更改。

內核交換守護進程(kswapd)是Linux內核的一部分,它將使用過的內存轉換為空閑內存。當設備上的空閑內存不足時,守護進程將變為活動狀態。Linux內核保持低和高的可用內存閾值。當空閑內存低於低閾值時,kswapd開始回收內存。當空閑內存達到高閾值,kswapd將停止回收內存。
kswapd可以通過刪除干凈的頁面來回收干凈的頁面,因為它們有存儲器支持並且沒有被修改。如果進程試圖定址已刪除的干凈頁,則系統會將該頁從存儲器復制到RAM。此操作稱為請求分頁。

kswapd將緩存的私有臟頁(private dirty pages)和匿名臟頁(anonymous dirty pages)移動到zRAM進行壓縮。這樣做可以釋放RAM中的可用內存(空閑頁)。如果進程試圖觸摸zRAM中臟頁,則該頁將被解壓縮並移回RAM。如果與壓縮頁關聯的進程被終止,則該頁將從zRAM中刪除。
如果可用內存量低於某個閾值,系統將開始終止進程。

lmkd實現源碼要在system/core/lmkd/lmkd.c。
lmkd會創建名為lmkd的socket,節點位於/dev/socket/lmkd,該socket用於跟上層framework交互。

小結:
LMK_TARGET: AMS.updateConfiguration() 的過程中調用 updateOomLevels() 方法, 分別向/sys/mole/lowmemorykiller/parameters目錄下的minfree和adj節點寫入相應信息;
LMK_PROCPRIO: AMS.applyOomAdjLocked() 的過程中調用 setOomAdj() 向/proc/<pid>/oom_score_adj寫入oom_score_adj後直接返回;
LMK_PROCREMOVE: AMS.handleAppDiedLocked 或者 AMS.() 的過程,調用remove(),目前不做任何事,直接返回;

為了進一步幫助平衡系統內存並避免終止APP進程,可以Activity類中實現ComponentCallbacks2介面。提供的onTrimMemory()回調方法允許APP在前台或後台偵聽與內存相關的事件,然後釋放對象以響應應用程序生命周期或表明系統需要回收內存的系統事件。
onTrimMemory()回調是在Android 4.0(API級別14)中添加的。
對於早期版本,可以使用onLowMemory(),它大致相當於TRIM_MEMORY_COMPLETE事件。

一個專門的驅動。(Linux Kernel 4.12 已移除交給kswapd處理)。
很多時候,kswapd無法為系統釋放足夠的內存。在這種情況下,系統使用onTrimMemory()通知APP內存不足,應該減少其分配。如果這還不夠,內核將開始終止進程以釋放內存,它使用低內存殺手(LMK)來完成這個任務。
為了決定要終止哪個進程,LMK使用一個名為oom_adj_score的「out of memory」分數來確定運行進程的優先順序,高分的進程首先被終止。
後台應用程序首先被終止,系統進程最後被終止。
下表列出了從高到低的LMK評分類別。第一排得分最高的項目將首先被殺死:

Android Runtime(ART)和Dalvik虛擬機使用分頁(Paging)和內存映射(mmapping)來管理內存。應用程序通過分配新對象或觸摸已映射頁面來修改內存都將保留在RAM中,並且不能被調出。應用程序釋放內存的唯一方式是垃圾收集器。

㈡ 手機總是容易滿內存,到底是什麼在占內存

問這個問題,應該是Android手機的玩家吧,而且你對Android的內存機制也不了解,簡單來說,Android中的內存就是給你用的,不用還不正常,根本不用擔心內存怎麼只剩下幾百M呢。

像我們這些在Windows陪伴下成長起來的玩家,「內存不足」經常遇到,但是Android有著與Windows完全不一樣的內存管理機制,Windows上的那一套,對Android並沒用。

Android中可用內存是個沒意義的數字

Windows中一旦程序被關閉,分配的內存也就釋放出來,然而在Android中運行過的應用絕大多數是從前台轉入到後台,並保留在內存中並不會也不需要主動釋放,這樣下次再運行該應用時,可以更快的啟動。

無論手機的物理內存有多大,Android都能將其充分利用,將需要用到的數據從硬碟讀入到內存,以提高數據訪問性能,也就是說, 在Android系統中,可用內存越小,表明其調用的數據就越多,訪問的命中率就越高,系統也就越快 。

你可能會問,當打開的應用越來越多,佔用的內存總會爆滿的,那怎麼辦呢?

Android有著優秀的內存回收機制

Android使用了一個名為Low Memory Killer(LMK)的機制來管理內存,當內存出現不足時,LMK就開始揮舞屠刀殺掉一些進程以獲得新的內存空間。

Android有一套獨特的進程管理,它會以oom_adj來表示進程的重要性,oom_adj的值越小,則重要性越高,oom_adj的值越大,該進程被系統選中殺掉的可能性越高。

Android默認的進程管理策略

為了更好的評估進程的重要性,Android將進程分為六類,如下所述:

前台進程:oom_adj=0,指正在當前屏幕上顯示的進程和一些系統進程,一旦你回到主界面 或切換到其它程序,當前進程變為隱藏進程,前台進程是不會殺掉的;

可見進程:oom_adj=1,可見進程雖然不在前台,但依然可見,如widget、輸入法等,這部分進程也非常重要,基本上不可能被殺掉;

次要服務:oom_adj=2,目前正在運行的一些服務,如下載、播放音樂,它們雖然屬於次要服務,但與系統息息相關,一般也不會被殺掉;

隱藏進程:oom_adj=7,這個很容易理解,當應用從前台轉入到後台後,也就成為隱藏進程了,通常一鍵清理內存就是清掉這些隱藏進程;

內容提供者:oom_adj=14,沒有程序實體,只提供內容供別的程序去用的,比如日歷供應節點,顯然這類進程最有可能被先殺掉;

空進程:oom_adj=15,有些程序在程序退出後,依然會在進程中駐留一個空進程,這個進程里沒有任何數據在運行,作用往往是提高該程序下次的啟動速度或者記錄程序的一些 歷史 信息,這類進程無疑是要最先被殺掉的。

Android的內存管理機制非常適合嵌入式系統,能充分發揮出硬體的潛力,當內存越大,它的優勢就越明顯。

Android手機需要清內存嗎?不需要

那麼Android手機到底要不要清內存?結論是:不需要!其實這個結論也適用iPhone手機。

手機內存分為兩部分,運行內存和存儲內存。買手機時,一個型號的手機有很多套餐可以選擇,比如6+64GB、4+128GB,前面的4GB,6GB就是運行內存,後者則是存儲內存。

佔用手機運行內存的主要是手機運行程序時被軟體佔用的內存,安卓手機的系統會把手機里說有的軟體都放在後台運行之中,因為這樣開啟軟體的時候會節約等待啟動的時間,除非用戶自己去設置關閉開機自動啟動軟體。

可運行內存一共就那麼多,雖然現在新款手機的運行內存不斷加大但隨著軟體的不斷更新升級,佔用的手機內存也會越來越大,這都是成正比的。為了清理軟體佔用的內存,安卓手機都會配備「一鍵清理」的功能去清理運行內存,這樣可以使因為佔用運行內存過多而變卡頓的手機流暢起來。

而佔用存儲內存的東西就有很多了,比如軟體的數據緩存、微信qq的聊天記錄、相冊里的照片、下載的音樂視頻、簡訊垃圾、手機隨著系統升級,本身系統所佔的內存也會越來越大,這些都會佔用手機的存儲內存。

其中最佔用存儲內存的就當屬照片和微信了。那麼該怎麼看微信到底佔用了多少內存呢?

點開微信中的[我]-[設置]-[通用]-[清理微信存儲空間],等待幾秒鍾後就會顯示佔了多少內存了,如果你不經常清理,那這個數字一定會讓你大吃一驚。然後點擊下方的[管理微信聊天數據]清楚就好了。

一般如果是安卓手機的話,如果手機內存較小,很容易出現內存不夠用的情況。安卓系統、應用廠商的服務、手機應用等都會佔用大量的內存,由於國內手機廠商深度定製的安卓系統,普遍存在全家桶,大量的服務和應用存在自啟和連環喚醒情況,大量消耗用戶內存,造成手機內存佔用過高,嚴重影響了用戶的使用體驗。而反觀國外很多採用原生安卓系統的手機,雖然內存並不大,但內存的佔用率卻極低,實際的應用體驗卻更優秀。所以國內手機廠商的全家桶,是造成手機內存佔用率較高的主要原因。一般可以通過手機助手清理內存,禁止應用自啟,卸載無用應用等方法解決手機內存佔用較多的問題。

由於目前手機的硬體利潤較低,很多國內手機廠商都是通過預裝應用的方式,提升手機的利潤。所以國產手機普遍存在以全家桶的方式,打包預裝各種應用和服務,通常會在手機中進行自啟,或者連環喚醒,佔用了大量的手機內存,嚴重影響了手機用戶的體驗。

如果手機的內存佔用過高,可以藉助手機衛士等工具對手機的內存進行清理,對於不常用的手機應用進行卸載,提升手機的運行效率。另外也可以通過禁止手機應用的自啟,來提升手機內存的使用效率,但對於手機存在應用連喚醒的情況,是無效的。所以手機衛士或管家,只能暫時解決手機內存佔用過高的問題,無法從根本上解決問題。

目前的cm等第三方原生安卓系統,一般都不夾帶國產手機廠商的全家桶,系統十分純凈,一般對於手機內存的佔用都比較小。一般如果條件允許的話,可以刷第三方的原生安卓系統,提升手機內存的使用效率。

華為榮耀暢玩4,搭載的驍龍410晶元,僅配置了1g內存,可以說硬體配置十分渣,運行華為自帶emui系統,內存佔用極高,基本卡都沒辦法使用。但刷cm13系統後,竟然滿血復活,運行普通應用十分流暢,完全可以當做備用機使用。這也充分說明,很多國產手機在硬體配置方面沒有太大瓶頸,主要是國產手機系統的全家桶,佔用大量內存,拖慢了整機的速度。

對於手機內存佔用過大的問題,主要是由於安裝和啟動的手機應用較多,特別是很多國產手機的全家桶,佔用和消耗了大量的手機內存,影響了手機的使用效率。一般可以通過手機衛士等工具,清理內存,禁止應用自啟等方法解決手機內存佔用過大的問題。如果想從根本上解決這個問題,更多的還是依靠手機廠商摒棄全家桶,推出類似cm的第三方原生安卓系統。如果條件許可的話,用戶也可以刷cm等比較純凈的第三方安卓系統。

手機內存分為運行內存(RAM,簡稱運存)和存儲內存(ROMZ)兩種。運行內存比較少,手機一般4G和6G居多。存儲內存較大,一般16G—512G,其中64G和128G居多。比如一款手機為「6+64G」的內存,就代表著6G的運行內存和64G的存儲內存。

運行內存是為手機運行的程序服務的,換句話說,就是儲存運行中的程序的這部分內存。手機不像電腦,當你退出一個程序後,這個程序不會直接關閉,而是在後台繼續運行。就比如當你在下載一部電影的時候,你返回桌面或者打開其他軟體,這部電影還在繼續下載。

只有2G運存的安卓機相信不少人都用過,只要後台運行的程序一多,分分鍾給你卡到原地爆炸。而反觀只有1G運存的蘋果卻從來不會出現這種情況,這是因為兩者的系統運行機制不同。蘋果的ios系統對於後台運行的軟體有很好的優化,系統只會分少量的資源給後台運行的應用。這樣即保證了後台應用的運行,也不會耽誤新程序的載入速度。而安卓系統就不同了,對於後台運行的程序沒有限制,所以後台一多,馬上變卡。

不過現在的安卓系統新增了一個叫Low Memory Killer(LMK)的後台程序管理機制。每當運行內存不足時,LMK都會自動關閉最不重要的後台程序來為新程序騰出運行內存和系統空間。所以現在的安卓機只要你不是開太多程序,4—6G的運行內存不會被占滿。

存儲內存相信大家更熟悉了,就是用來儲存數據的內存。手機中每個文件、軟體、圖片、視頻都需要佔用存儲內存。而且,隨著手機的使用,系統中的垃圾文件會越來越多,更新的軟體越來越大,導致內存不夠用。在這個一個QQ、微信動輒幾個G的時代,32G的手機內存是不夠用了。筆者建議大家最好買64G以上的手機,並且定期恢復出廠設置。

關閉一些沒必要自動運行的軟體,瀏覽器可以選擇無圖模式,音樂播放器可以關閉歌手圖片顯示,視頻播放器要時刻的清理緩存,還有軟體安裝後自動刪除安裝包, 游戲 停止運行後,手動清理全盤緩存,QQ壓縮包,文件管理器中可以找到,格式zip,如果你知道文件夾是哪個軟體所有,覺得清理掉不會影響使用,就清理了,你會發現手機內存又多了至少2GB,不信你就試試吧

手機佔用內存最大的就是系統和軟體,系統方面你可以通過刷機來改變大小,可以在手官網(或者其他大神資源)找一個自己機型的精減刷機包, 軟體方面你可以在安智市場裡面下載 歷史 版本,較小的軟體包可以減輕手機內存壓力,另外你還可以root手機,root後可以禁止軟體自啟,阻止軟體相互喚醒,刪除不需要的系統軟體,一星期左右可以關機一次,徹底釋放內存。

其實手機內存不外乎兩種,一是各種APP的緩存,現代人基本離不開社交軟體,隨便幾個APP的緩存加起來可能都已經超過1G了,這就需要經常清理軟體緩存,可以藉助360等其他的手機管家,一鍵清理很方便。

還有就是手機裡面的照片,這塊比APP緩存還要厲害,我的手機曾經幾度內存不足都是因為照片太多了~~現在是專門下載了天翼雲盤去保存照片,再者就是各種軟體,如果不是必須用經常用的軟體其實也可以清理掉,這些功夫做完之後內存應該會有一個很大的改變。

你說的是ram還是flash,如果是ram,程序就是盡可能的使用內存提高運行性能(這個天經地義),lOS會自行清後台進程,安卓不會,但有方法設置,可以逐個關閉不重要應用的後台運行,還可以點6下版本號打開開發者選項(安卓通用方式),在裡面找到限定後台進程數量(一般1到4個,不限),選擇限定個數即可,但不是什麼手機都有這選項

如果你說的是flash,卸載微信吧。。。。。。

設置一下後台最多隻同時打開三個或四個應用軟體,其實安卓沒有必要那麼在乎還剩下多少內存,你會發現六個g和四個g內存佔用率都是差不多的。都剩下不了多少內存。系統會根據使用習慣把常用軟體從rom調入ram中供用戶隨時快速打來。

閱讀全文

與安卓手機如何打開lmk文件相關的資料

熱點內容
雲伺服器資源評估 瀏覽:882
微雲下載文件夾是空的 瀏覽:3
r9數控車的編程 瀏覽:403
為什麼刪不掉ksafe文件夾 瀏覽:291
理科男學編程用什麼電腦 瀏覽:839
安陽彈性雲伺服器 瀏覽:570
壓縮空氣儲罐有效期 瀏覽:408
英國文學PDF 瀏覽:175
軟體編程需求 瀏覽:626
廣州哪裡解壓 瀏覽:253
手機小視頻怎麼壓縮 瀏覽:915
微信聊天界面源碼 瀏覽:24
seo競價推廣點擊價格演算法公式 瀏覽:319
框架結構可以加密嗎 瀏覽:218
python編譯器怎麼清除 瀏覽:73
linux全局socks代理 瀏覽:611
php微信抽獎 瀏覽:771
壓縮演算法嵌入式移植 瀏覽:531
php新手小例子 瀏覽:233
按照醫生的演算法一周是幾天 瀏覽:805