一種終端的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及內(nèi)存管理領(lǐng)域,尤其涉及一種終端。
【背景技術(shù)】
[0002]垃圾回收機(jī)制(Garbage Collect1n,GC)有兩個(gè)重要使命:一個(gè)是內(nèi)存回收,對(duì)內(nèi)存中的每個(gè)對(duì)象進(jìn)行計(jì)數(shù)管理,當(dāng)一個(gè)對(duì)象不再被程序引用即計(jì)數(shù)為O時(shí),它所占用的堆空間就可以回收,以便分配給新對(duì)象使用;另外一個(gè)就是堆碎塊管理,應(yīng)用程序在運(yùn)行過程中可能會(huì)進(jìn)一步要求生成新的內(nèi)存對(duì)象,經(jīng)過長時(shí)間的內(nèi)存生成、清理后,內(nèi)存中會(huì)存在很多的堆碎塊。
[0003]現(xiàn)有技術(shù)中一般通過壓縮收集或拷貝收集的方式來進(jìn)行堆碎塊管理,從而實(shí)現(xiàn)將散亂的堆碎塊收集到一個(gè)連續(xù)的內(nèi)存區(qū)域,增加內(nèi)存空間的利用效率。
[0004]但是,無論是壓縮收集還是拷貝收集,由于所收集的都是正在被引用的活動(dòng)對(duì)象,即其被正在運(yùn)行的應(yīng)用程序所引用,相應(yīng)的應(yīng)用程序會(huì)被停止運(yùn)行才能完成其引用位置的轉(zhuǎn)移?;顒?dòng)對(duì)象轉(zhuǎn)移完成后才將應(yīng)用程序恢復(fù),如果應(yīng)用程序停止運(yùn)行的時(shí)間較長則會(huì)明顯降低用戶體驗(yàn)。
【發(fā)明內(nèi)容】
[0005]本發(fā)明實(shí)施例提供了一種終端,可實(shí)現(xiàn)在清理預(yù)設(shè)內(nèi)存的過程中,減小對(duì)正在運(yùn)行在所述預(yù)設(shè)內(nèi)存中的用戶交互程度高的程序的影響。
[0006]本發(fā)明實(shí)施例公開了一種終端,該終端包括:
[0007]輸入單元,用于接收清理指令,所述清理指令用于觸發(fā)清理預(yù)設(shè)內(nèi)存;
[0008]分析單元,用于響應(yīng)所述清理指令,在所述預(yù)設(shè)內(nèi)存中,分析出被第一類程序引用的活動(dòng)對(duì)象和被第二類程序引用的活動(dòng)對(duì)象;所述第一類程序的用戶交互度低于或等于預(yù)設(shè)交互度閾值;所述第二類程序的用戶交互度高于所述預(yù)設(shè)交互度閾值;
[0009]選擇單元,用于從所述預(yù)設(shè)內(nèi)存中選取出目標(biāo)區(qū)域;
[0010]移動(dòng)單元,用于將所述被第一類程序引用的活動(dòng)對(duì)象移動(dòng)至所述目標(biāo)區(qū)域,并將所述被第一類程序引用的活動(dòng)對(duì)象在移動(dòng)之前所占內(nèi)存釋放。
[0011]實(shí)施本發(fā)明實(shí)施例,在清理預(yù)設(shè)內(nèi)存的過程中,通過分析出運(yùn)行在所述預(yù)設(shè)內(nèi)存中的第一類程序和第二類程序,并將第一類程序引用的活動(dòng)對(duì)象移動(dòng)至目標(biāo)區(qū)域,之后釋放所述第一類程序引用的活動(dòng)對(duì)象在移動(dòng)之前所占用的內(nèi)存,可實(shí)現(xiàn)在對(duì)預(yù)設(shè)內(nèi)存進(jìn)行碎片整理時(shí),降低對(duì)運(yùn)行在所述預(yù)設(shè)內(nèi)存中的用戶交互程度高的程序的影響,提高了用戶體驗(yàn)。
【附圖說明】
[0012]為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0013]圖1是本發(fā)明實(shí)施例提供的內(nèi)存管理方法的第一實(shí)施例的流程圖;
[0014]圖2是本發(fā)明實(shí)施例提供的內(nèi)存管理方法的第二實(shí)施例的流程圖;
[0015]圖2A是本發(fā)明實(shí)施例提供的遍歷預(yù)設(shè)內(nèi)存的示意圖;
[0016]圖3是本發(fā)明實(shí)施例提供的內(nèi)存管理方法的第三實(shí)施例的流程圖;
[0017]圖4是本發(fā)明實(shí)施例提供的終端的第一實(shí)施例的結(jié)構(gòu)示意圖;
[0018]圖5是本發(fā)明實(shí)施例提供的終端的第二實(shí)施例的結(jié)構(gòu)示意圖;
[0019]圖6是本發(fā)明實(shí)施例提供的終端的第三實(shí)施例的結(jié)構(gòu)示意圖;
[0020]圖7是本發(fā)明實(shí)施例提供的終端的第四實(shí)施例的結(jié)構(gòu)示意圖;
[0021]圖8是本發(fā)明實(shí)施例提供的終端的第五實(shí)施例的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0022]下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0023]參見圖1,是本發(fā)明實(shí)施例提供的內(nèi)存管理方法的第一實(shí)施例的流程圖,該方法包括:
[0024]步驟SlOl:接收清理指令。
[0025]具體的,所述清理指令用于觸發(fā)清理預(yù)設(shè)內(nèi)存。
[0026]本發(fā)明實(shí)施例中,所述清理指令可以是用戶觸發(fā)終端系統(tǒng)提供的內(nèi)存清理按鈕產(chǎn)生的指令,例如,系統(tǒng)通知欄的下拉菜單中的清理按鈕、桌面中的清理按鈕、設(shè)置頁面中的清理按鈕。本發(fā)明實(shí)施例中,所述清理指令也可以是觸發(fā)第三方應(yīng)用提供的內(nèi)存清理按鈕產(chǎn)生的指令。本發(fā)明實(shí)施例中,所述清理指令還可以是系統(tǒng)在空閑時(shí)段(如鎖屏、無前臺(tái)應(yīng)用運(yùn)行等時(shí)刻)自動(dòng)觸發(fā)的內(nèi)存清理指令。本發(fā)明實(shí)施例中,所述清理指令還可以是系統(tǒng)在用戶設(shè)定時(shí)間觸發(fā)的內(nèi)存清理指令。實(shí)際應(yīng)用中,系統(tǒng)執(zhí)行內(nèi)存清理的觸發(fā)條件還可以是其他形式的條件,不應(yīng)構(gòu)成限定。
[0027]步驟S103:響應(yīng)所述清理指令,在所述預(yù)設(shè)內(nèi)存中,分析出第一類程序引用的活動(dòng)對(duì)象和第二類程序引用的活動(dòng)對(duì)象。
[0028]具體的,所述第一類程序的用戶交互度可以低于或等于預(yù)設(shè)交互度閾值;所述第二類程序的用戶交互度可以高于所述預(yù)設(shè)交互度閾值。
[0029]可理解的,用戶交互度高的程序需要頻繁地接收用戶輸入的數(shù)據(jù)或者向用戶輸出數(shù)據(jù),或者運(yùn)行在前臺(tái)。例如,鍵盤輸入事件處理程序。又例如,終端屏幕刷新程序。再例如,流媒體播放程序。示例僅僅是本發(fā)明實(shí)施例的一種實(shí)現(xiàn)方式,實(shí)際使用中可以不同,不應(yīng)構(gòu)成限定。
[0030]需要說明的,本發(fā)明實(shí)施例涉及的所述預(yù)設(shè)交互度閾值可以指程序在單位時(shí)間內(nèi)占用終端的輸入輸出端口的次數(shù)閾值。本發(fā)明實(shí)施例涉及的所述預(yù)設(shè)交互度閾值也可以指程序占用終端的輸入輸出端口的時(shí)間長度閾值。本發(fā)明實(shí)施例涉及的所述預(yù)設(shè)交互度閾值還可以指程序運(yùn)行在前臺(tái)的時(shí)間長度閾值。對(duì)于程序的用戶交互程度的計(jì)量方式,本發(fā)明實(shí)施例不作限制。
[0031]具體實(shí)現(xiàn)中,終端可以根據(jù)所述預(yù)設(shè)內(nèi)存中的活動(dòng)對(duì)象對(duì)應(yīng)的程序的運(yùn)行狀態(tài)或輸入輸出端口的占用情況,分析出所述預(yù)設(shè)內(nèi)存中的所述第一類程序引用的活動(dòng)對(duì)象和所述第二類程序引用的活動(dòng)對(duì)象。例如,所述預(yù)設(shè)交互度閾值是單位時(shí)間內(nèi)占用終端的輸入輸出端口的次數(shù)為10次的次數(shù)閾值。那么,在單位時(shí)間內(nèi)占用終端的輸入輸出端口的次數(shù)少于10次的程序所引用的活動(dòng)對(duì)象可分析為所述第一類程序引用的活動(dòng)對(duì)象。
[0032]優(yōu)選的,所述第一類程序可以是當(dāng)前沒有占用輸入輸出端口的程序,所述第一類程序也可以是運(yùn)行在后臺(tái)的程序。需要說明的,所述第二類程序可以是預(yù)設(shè)實(shí)時(shí)通信的數(shù)據(jù)服務(wù)程序,例如,通話業(yè)務(wù)的數(shù)據(jù)同步程序。
[0033]步驟S105:從預(yù)設(shè)內(nèi)存中選取出目標(biāo)區(qū)域。
[0034]具體的,所述目標(biāo)區(qū)域用于存放移動(dòng)后的活動(dòng)對(duì)象。所述目標(biāo)區(qū)域的容量可以大于或等于所述預(yù)設(shè)內(nèi)存中的全部活動(dòng)對(duì)象所占容量。所述預(yù)設(shè)內(nèi)存可以是終端的整個(gè)內(nèi)存,也可以是終端的部分內(nèi)存,這里不作限制。
[0035]可理解的,運(yùn)行在所述預(yù)設(shè)內(nèi)存中的應(yīng)用程序所引用的活動(dòng)對(duì)象零散的分布在所述預(yù)設(shè)內(nèi)存中,因此,所述預(yù)設(shè)內(nèi)存中剩下的可分配內(nèi)存也是零散的內(nèi)存片段。
[0036]具體實(shí)現(xiàn)中,所述目標(biāo)區(qū)域可以是所述預(yù)設(shè)內(nèi)存的任意一段內(nèi)存區(qū)域,用以存放所述目標(biāo)區(qū)域外的待移動(dòng)的活動(dòng)對(duì)象,使得被移動(dòng)的活動(dòng)對(duì)象在移動(dòng)之前占用的空間在釋放之后形成較為連續(xù)的可分配內(nèi)存片段。例如,所述目標(biāo)區(qū)域可以是所述預(yù)設(shè)內(nèi)存的高地址端的存儲(chǔ)區(qū)域。又例如,所述目標(biāo)區(qū)域可以是所述預(yù)設(shè)內(nèi)存的低地址端的存儲(chǔ)區(qū)域。示例僅僅是本發(fā)明實(shí)施例的一種實(shí)現(xiàn)方式,實(shí)際使用中可以不同,不應(yīng)構(gòu)成限定。
[0037]優(yōu)選的,所述目標(biāo)區(qū)域可以是所述預(yù)設(shè)內(nèi)存中使得所述目標(biāo)區(qū)域外的活動(dòng)對(duì)象移動(dòng)到其中的移動(dòng)時(shí)間最少的一段存儲(chǔ)區(qū)域。
[0038]優(yōu)選的,所述目標(biāo)區(qū)域可以是所述預(yù)設(shè)內(nèi)存中的一段空白的存儲(chǔ)區(qū)域,以使所述目標(biāo)區(qū)域能被移動(dòng)后的活動(dòng)對(duì)象填滿。
[0039]優(yōu)選的,所述目標(biāo)區(qū)域可以是所述預(yù)設(shè)內(nèi)存中包含所述第二類程序引用的活動(dòng)對(duì)象最多的一段存儲(chǔ)區(qū)域,以實(shí)現(xiàn)所述目標(biāo)區(qū)域外的所述第一類程序引用的活動(dòng)對(duì)象都被移動(dòng)至所述目標(biāo)區(qū)域之后,所述目標(biāo)區(qū)域外的存儲(chǔ)空間能形成比較連續(xù)的內(nèi)存片段。
[0040]步驟S107:將所述第一類程序引用的活動(dòng)對(duì)象移動(dòng)至所述目標(biāo)區(qū)域,