Android內存分配分配機制

移動應用測試已經在作了一年多了,想更深層次的提高本身。因此研究下Android深層次的東西,記錄下來,以備未來之需。因此本文由引用網絡上的一些東西,拿來主義仍是我很贊同的一種方式。另外由於目前沒有對Ios進行深刻的研究,因此目前的研究方向只是在Android方向。android

內存泄露能夠算是移動應用測試中比較難測試,隱藏較深的問題類型之一。要想理解如何分析,必須先要從根上走起,這裏提升的根就是Android的內存分配機制。因此先從這個根基出發。
1. 機制
根據以前的測試經驗發現,其實Android系統會對不在使用的進程,進行回收,也就是kill掉一些進程來獲取更多的內存。
上網查詢了資料發現,這是android 系統的一個內存管理機制。被稱爲Low Memorry Killer的一種管理機制。
2. 處理邏輯
Low Memorry Killer的機制主要是經過進程的oom_adj來進行內存的處理的。下面是從網上截取的一段代碼,是來自於Android內核的一些東西
 FOREGROUD_APP   0
 VISIBLE_APP  1
   SECONDARY_SERVER
BACKUP_APP
 2
 HOME_APP  4
 HIDDEN_APP  7
 CONTENT_PROVIDER 14
 EMPTY_APP 15
在這個表中,前面表明的是程序重要性的名稱,後面的數字表明的com_adj的數值分配,固然了,越小的值表明程序越重要,被Kill的可能性也就更小。
固然在代碼中還存在着其餘的對應關係,以下
 0  1536 
 1  2048
 2  4096
 4  4096
 7  5120
 14  5632
 15  6144
這裏其實算出來的是一個閥值,閥值的意思是當手機內存小於閥值的狀況下,內存就會開始逐級回收該類型的內存了。好比說15 級別是 6144 * 4K = 24 M,即當手機內存小於24M的時候開始回收15級別的應用的內存。
寫在最後的話:
分析完了Android的這套機制以後,得出幾個結論:
1. 若是要作內存泄露測試,只能靠觀察,猜想,
2. 內存測試最好是在小內存的手機上測試。這樣比較容易實現kill的條件。可是即使kill事件發生了也不能肯定是內存泄露。
相關文章
相關標籤/搜索