導航:首頁 > 操作系統 > android修改內存大小

android修改內存大小

發布時間:2023-05-22 06:16:58

1. android游戲內存修改問題(程序猿進)

android:process定義activity運行所在的進程名稱。一般情況下,應用的所有組件都運行在為應用創建的默認的進程中,該默認進程的名稱應用包名稱一致。通過定義元素的「process」屬性可以為所有組件指定一個不同的默認進程。但是任意組件都可以重寫默認進程,以便實現多進程操作。如果該屬性指定名稱以「:」開頭,則一個新的專屬於該應用的進程將會被創建。如果該進程名以小寫字母開頭,則為該activity提供許可權以讓其在一個全局的進程中運行。這樣會允許多個應用的不同組件共用一個進程,以便節省資源。Android是支持多進程的,每個進程的內存使用限制一般為24MB的內存,所以當完成一些很耗費內存的操作如處理高解析度圖片時,需要單獨開一個進程來執行該操作(上面的配置可以用來實現該操作)。即便如此,開發者還是不要隨意多開進程來耗費用戶的資源。(內存限制,有16MB,24MB,32MB,很老的機型的內存限制會是16MB,這個具體還要再搜索下資料。。)另外一些還有一些其他的方式來繞過內存限制,使用的資源來完成自己的任務,如下文(有待實踐):HowtoworkaroundAndroid』-process24MBmemorylimit.Onsomeolderdevices,suchastheG1,thelimitisevenlowerat16MB.What』smore,.:E/dalvikvm-heap(12517):1048576-.E/GraphicsJNI(12517):VMwon'tletusallocate1048576bytesD/AndroidRuntime(12517):ShuttingdownVMW/dalvikvm(12517):threadid=1:(group=0x4001d7f0)E/AndroidRuntime(12517):FATALEXCEPTION:mainE/AndroidRuntime(12517):java.lang.OutOfMemoryError:.Foradevice,liketheNexusOne,with512MBofphysicalRAM,settingtheper-%oftheRAMisasillymistake.Butanyway,that』—i.e.findhowtoworkaroundit.:.UsingtheNDK(nativedevelopmentkit)andJNI,it』(e.g.malloc/freeornew/delete),.It』strue,,(evenimagedata).Anotherway,whichworkswellforimages,istouseOpenGLtextures—..os.Debug.getNativeHeapAllocatedSize().,onaNexusOne,—.

2. 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中,並且不能被調出。應用程序釋放內存的唯一方式是垃圾收集器。

3. 修改Android Studio的內存大小

首先我們看看當前AS的內存大小:
打開設置
點擊Appearance

然後將 Show memory indicator 這個選項勾選上,點擊右下角的Apply。接著我我們回到主頁面,就可以在頁面的右下角看到當前AS所佔用的內存大小了。

我們可以看到,現在的內存為1446M。但是太小了,想要擴大,該怎麼弄呢?
我們先找到 Android Studio 的安裝目錄,在其 bin 目錄下,找到 studio64.exe.vmoptions 這樣一個vmoptions文件,然後將其打開,我所用的是NotePad++。

我們可以看到,方框中的兩個參數,就是需要我們進行變更的參數。

根據自己電腦內存大小,對這兩個參數進行調整。

別忘了對修改之後的文件進行保存。

然後我再回到AS中,點擊File->Ivalidate Caches讓之前的設置生效。

然後就靜待Android Studio重啟就好了。

4. 求助:android平台可不可以做出內存修改器

可以,但是一般的手機需要你先破解了才可以,要不手機只有user許可權,你就修改不了系統。手機破解你可以找網上的一些破解軟體 apk市場裡面搜索 手機root。手機破解後你就可以做一些內存修改器的apk了。

如果對您有幫助,希望採納,謝謝。

5. 提升Android手機運行內存教程

隨著智能手機的不斷發展以及用戶需求的不斷增加,手機的運行內存(RAM)的大小已經從MB過渡到了GB容量,作為用戶的我們只是知道運行內存越大越好,而運行內存到底有什麼用你知道么?接下來是我為大家收集的提升Android手機運行內存教程,希望能幫到大家。
提升Android手機運行內存教程
知識小科普

無應用運行時內存佔用已近半

這個時候就又到了筆者給大家科普的時候了。RAM全稱Random Access Memory,我們都習慣稱之為運行內存,又稱隨機存儲器。其是與CPU直接交換數據的內部存儲器,也叫主存(內存)。它可以隨時讀寫,並且速度很快,通常作為系統或正在運行程序的臨時數據存儲媒介。

為啥安卓手機更吃內存

看到這你可能深深的認為RAM還是越大越好,對沒錯筆者也是這么認為的。縱觀安卓手機的發展,RAM已經從最初的128MB發展到了現在的6GB(消息稱8GB已經在路上),而蘋果從最初的128MB至今RAM也不過才發展到2GB而已,但仍然可以流暢運行,這又是為何呢?

iOS VS Android(圖片引自antutu)

這就完全要歸結於安卓和蘋果不同的內存運行機制。安卓系統在運行一個程序時:CPU開始計算-內存開始緩存-再讀取目標文件開始計算,當結束程序時CPU計算完畢但內存仍然有部分緩存佔用。而蘋果就不同當CPU開始運算後就會收集所有內存為應用運行進行緩存,在結束應用時會釋放全部內存。

用戶的內存不足解決之道

對於一般用戶來說就是安裝各類清理軟體,卸載多餘不常用APP,軟體關閉後及時清理後台。目前許多手機中還加入了後台應用管理的功能並提供一鍵清理選項,實在受不了的時候就對手機進行一次出廠化設置。

手機中自帶的許可權管理應用

對於安卓有一定了解的用戶,則會選擇精簡版的ROM來進行刷機(一般情況下系統的精簡度是和流暢性成正比的),並通過ROOT獲取許可權,從根本控制軟體的自啟及對內存的佔用。

各類刷機軟體中都提供精簡版ROM一鍵刷機和一鍵ROOT(圖片引自romjd)

而那些動手能力極強的用戶還會選擇一些特別的方法,比如通過創建Swap(交換分區)來解決,當用戶的實體內存不足時便會調用這部分虛擬內存來運行應用。

Linux中的Swap即交換分區,類似於Windows的虛擬內存,就是當內存不足的時候,把一部分硬碟空間虛擬成內存使用,從而解決內存容量不足的情況。而Android正是基於Linux研發的操作系統,所以也可以使用Swap分區來提升系統運行效率。

對於安卓手機如何創建Swap的具體過程筆者就不做過多介紹,不過首先你的手機內核需要支持Swap,並且已ROOT,可以利用內置存儲或內存卡(需注意卡片讀寫速度)進行製作,詳細方法及所需軟體請執行網路。


看了“提升Android手機運行內存教程”還想看:

1. 安卓手機運行內存不夠用的解決方法

2. 怎樣能刷運行內存

3. 安卓手機運行內存太小怎麼優化

4. 怎樣擴大手機內部內存

5. 怎樣擴展手機最大內存

閱讀全文

與android修改內存大小相關的資料

熱點內容
程序員的工作是重復性的嗎 瀏覽:63
照片怎麼轉換成pdf 瀏覽:131
女生學編程好嗎 瀏覽:240
目前絕地求生怎麼看伺服器地址大全 瀏覽:825
論人類不平等的起源pdf 瀏覽:436
壓縮機螺桿加工 瀏覽:368
怎麼把網站伺服器設置在境外 瀏覽:162
單片機編程取反 瀏覽:897
51單片機課程設計課題 瀏覽:900
手機淘寶登錄怎麼加密碼 瀏覽:486
linux快捷方式圖標 瀏覽:38
陽光車險的app叫什麼名字 瀏覽:462
購買單片機的器件時需要給商家啥 瀏覽:535
並行編譯技術的發展 瀏覽:550
阿里雲伺服器安裝管理 瀏覽:551
java手機開發教程 瀏覽:675
我的世界怎麼刪除伺服器數據 瀏覽:672
linux內存子系統 瀏覽:973
加密思維幣 瀏覽:691
魅族訪客文件夾 瀏覽:53