br>[0059]步驟S222:恢復候選內存頁集合中暫時屏蔽的內存頁,得到集合T ;
[0060]步驟S224:從應用進程A的應用進程依賴集合中選擇依賴度最低的應用進程;
[0061]步驟S226:從應用進程A的應用進程依賴集合中暫時屏蔽掉已經選出的應用進程;
[0062]步驟S228:從集合T中選取屬于上述依賴度最低的應用進程的內存頁集合S ;
[0063]步驟S230:判斷集合S是否為空;如果否,則繼續執行步驟S232 ;如果是,則返回步驟S224 ;
[0064]步驟S232:從集合S中按照LRU算法選出一個內存頁作為可清理對象,并從集合S和集合T中刪除該內存頁;
[0065]步驟S234:判斷是否已經清理出足夠的內存;如果是,則繼續執行步驟S242 ;如果否,則返回步驟S228 ;
[0066]步驟S236:按照標準LRU算法選擇需要清理出足夠的內存頁;繼續執行步驟S242 ;
[0067]在該優選實施例中,首先在應用進程A所依賴的應用進程集合中選出依賴度最低的應用進程,然后從LRU的內存頁集合中選擇屬于該應用進程的內存頁,然后再將這些內存頁按照LRU的順序依次選出標記為可以清理,直至內存清理足夠為止;
[0068]步驟S238-步驟S240:如果發生內存訪問事件,查詢訪問的內存頁所歸屬的應用進程,如果該應用進程已經存在于應用進程A所依賴的應用進程集合中,則將其對應的依賴度值加1,否則將其添加到應用進程A所依賴的應用進程集合中,并將其依賴度值設置為1 ;
[0069]步驟S242:判斷應用進程A是否從前臺退出;如果是,則繼續執行步驟S244 ;如果否,則返回步驟S204 ;
[0070]步驟S244:如果應用進程A被切換出前臺,則需要將應用進程A在前臺運行次數加1 ;
[0071]步驟S246:判斷應用進程A在前臺運行的次數是否已經超過第二預設閾值;如果是,則繼續執行步驟S248 ;如果否,則轉到步驟S250 ;
[0072]步驟S248:更新統計數據,丟棄部分舊的統計數據(例如:將運行次數值、應用進程A所依賴的應用進程集合中所有應用進程的依賴度值按照預設百分比值(P)加以縮小);
[0073]步驟S250:對統計數據進行存儲,流程結束。
[0074]作為本發明的一個優選實施例,本發明實施例所提供的技術方案可以在安卓(Android)系統上加以實現。在Android系統中,ActivityManagerService負責應用進程前臺與后臺之間的切換控制,linux內核負責內存實際清理和內存訪問控制。在Android上的優選實施流程如下:
[0075]步驟1) ActivityManagerService在切換應用進程時,需要向Linux內核發送一條消息,以說明當前應用進程的ID ;
[0076]步驟2)圖3是根據本發明優選實施例的統計數據結構的示意圖。如圖3所示,Linux內核在接收到來自于ActivityManagerService的消息之后,將該應用進程所對應的統計數據結構加載到內存中,其中,統計數據結構可以包括:一個前臺運行的應用進程ID所依賴的多個應用進程ID以及每個依賴應用進程所對應的運行次數;
[0077]步驟3)當Linux內核從其inactive的內存頁鏈表中選擇要清理的內存頁時,如果當前應用進程的統計數據結構中的運行次數未達到第一預設閾值,轉到步驟11);否則,轉到步驟4);
[0078]步驟4) Linux內核從其inactive的內存頁鏈表中按照LRU算法選出一個內存頁,如果能夠選出內存頁,轉到步驟5);否則,轉到步驟8);
[0079]步驟5)查詢已經選出的內存頁所歸屬的應用進程ID,如果當前應用統計數據結構的依賴應用進程集合中不包含該內存頁所歸屬的應用進程ID,則將該內存頁標記為可以清理,轉到步驟6);否則,轉到步驟7);
[0080]步驟6)如果還需要繼續清理內存,轉到步驟3);否則,轉到步驟12);
[0081]步驟7)跳過這個內存頁,轉到步驟3);
[0082]步驟8)從當前應用統計數據結構中選取“依賴次數”最少的依賴應用進程ID,然后從inactive的內存頁鏈表中取出所有屬于該依賴應用進程ID的內存頁;
[0083]步驟9)從步驟8)中獲得的內存頁按照LRU順序選出一個內存頁,將其標記為可清理,直至清理內存達到目標值為止,轉到步驟12);如果所有步驟8)中獲得的內存頁清理完都無法達到目標值,則轉到步驟10);
[0084]步驟10)從當前應用統計數據結構中排除掉在步驟8)中選取的“依賴次數”最少的依賴應用進程ID,轉到步驟8);
[0085]步驟ll)Linux內核從其inactive的內存頁鏈表中按LRU算法選出內存頁,直到達到清理內存的目標值為止;
[0086]步驟12)如果發生了內存訪問事件,轉到步驟13);否則,轉到步驟14);
[0087]步驟13)查詢訪問的內存頁所屬的應用進程ID,如果這個應用進程ID已經在統計數據結構中,則只對其對應的依賴次數值加1,否則將這個應用進程ID添加至當前應用進程的統計數據結構中,并將其對應的依賴次數值設置為1。對依賴次數值的另一種優化方式是,如果這個應用進程ID的依賴次數值已經被加1,則以后將不再增加;
[0088]步驟14)如果發生了當前應用進程退出前臺運行的事件,轉到步驟15);否則,轉到步驟3);
[0089]步驟15)將當前應用進程統計數據結構中的運行次數值加1,如果這個值大于第二預設閾值,則轉到步驟16),否則,轉到步驟17);
[0090]步驟16)將當前應用統計數據結構中的運行次數值按照比例P進行縮減,將當前應用進程統計數據結構中的所有依賴次數值按照比例P進行縮減;
[0091]步驟17)對當前應用進程統計數據結構進行存儲;流程結束。
[0092]圖4是根據本發明實施例的內存的清理裝置的結構框圖。如圖4所示,該內存的清理裝置可以包括:第一獲取模塊10,用于獲取第一應用進程在多次運行過程中同時運行的多個應用進程;第一選取模塊20,用于從多個應用進程中選取部分應用進程,其中,部分應用進程是根據多個應用進程中每個應用進程在多次運行過程中的運行概率確定的;第一清理模塊30,用于對與部分應用進程對應的第一內存頁集合進行清理。
[0093]采用如圖4所示的裝置,解決了相關技術中所提供的內存清理方式沒有考慮應用進程之間的依賴性的問題,進而加強了內存清理的有效性,提升了系統的反應速度。
[0094]優選地,如圖5所示,第一選取模塊20可以包括:第一獲取單元200,用于獲取第一應用進程的在多次運行過程中的第一運行次數;第二獲取單元202,用于獲取每個應用進程在多次運行過程中的第二運行次數;計算單元204,用于通過第二運行次數與第一運行次數的比值計算運行概率;選取單元206,用于按照運行概率由低到高的次序選取部分應用進程。
[0095]優選地,如圖5所示,上述裝置還可以包括:第二獲取模塊40,用于在多次運行過程中獲取未