終端內(nèi)存處理方法、裝置及終端的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及通信領(lǐng)域,具體而言,涉及一種終端內(nèi)存處理方法、裝置及終端。
【背景技術(shù)】
[0002]在移動(dòng)互聯(lián)網(wǎng)應(yīng)用風(fēng)靡的背景下,移動(dòng)終端上的應(yīng)用要想脫穎而出,對(duì)于應(yīng)用來說良好的體驗(yàn)是必不可少的。如當(dāng)應(yīng)用從網(wǎng)絡(luò)中獲取網(wǎng)絡(luò)圖片數(shù)據(jù)時(shí),用戶完全有可能做一些重復(fù)性的操作去查看相同的圖片信息。對(duì)于這樣的問題,通常會(huì)有兩種解決方法:一種是把過去查看過的圖片信息保存在內(nèi)存中,每一個(gè)存儲(chǔ)了圖片信息的Java對(duì)象的生命周期都貫穿整個(gè)應(yīng)用程序生命周期,此種方法加快了數(shù)據(jù)的訪問速度,但往往容易造成OutOfMemoryExcept1n ;另一種是當(dāng)用戶開始查看其它圖片信息的時(shí)候,把存儲(chǔ)了當(dāng)前的圖片信息的Java對(duì)象結(jié)束引用,使得垃圾收集器可以回收其所占用的內(nèi)存空間,當(dāng)用戶再次需要瀏覽該圖片信息的時(shí)候,重新獲取圖片信息,此種方法大大降低了OutOfMemoryExcept1n發(fā)生的可能性,但降低了用戶的體驗(yàn)。
[0003]顯然第一種實(shí)現(xiàn)方法將造成大量的內(nèi)存浪費(fèi),而第二種實(shí)現(xiàn)的缺陷在于即使垃圾收集線程還沒有進(jìn)行垃圾收集,包含圖片信息的對(duì)象仍然完好的保存在內(nèi)存中,應(yīng)用程序也要重新構(gòu)建一個(gè)對(duì)象。
[0004]例如,在專利申請(qǐng)?zhí)枮镃N201110454870.2的中國專利“基于Android系統(tǒng)的圖片加載方法和設(shè)置”中公開了一種Android系統(tǒng)的圖片加載方法和裝置。該專利僅對(duì)圖片加載采用軟引用的方法。該方法包括:A、發(fā)出圖片加載任務(wù)的指令,并初始化存儲(chǔ)圖片的軟引用;B、判斷所述軟引用中是否存儲(chǔ)有所需要顯示的圖片;C、若所述軟引用中沒有存儲(chǔ)所述要顯示的圖片,則運(yùn)行圖片加載線程進(jìn)行加載;若所述軟引用中存儲(chǔ)有所述所要顯示的圖片,則直接進(jìn)入步驟F ;D、若內(nèi)存不足,則自動(dòng)回收所述軟引用中存儲(chǔ)的圖片直至所述內(nèi)存充足;E、所述所要顯示的圖片加載完成,并存儲(chǔ)于所述軟引用中;F、從所述軟引用中直接讀取所述所要顯示的圖片并顯示。對(duì)于移動(dòng)設(shè)備來說,內(nèi)存資源相對(duì)來說比較緊缺,僅適用軟引用未必能夠達(dá)到最佳的緩存效果。
[0005]因此,在相關(guān)技術(shù)中存在終端內(nèi)存相對(duì)緊張同時(shí)又對(duì)終端應(yīng)用的用戶體驗(yàn)要求很高的矛盾的問題。
【發(fā)明內(nèi)容】
[0006]本發(fā)明提供了一種終端內(nèi)存處理方法及裝置,以至少解決相關(guān)技術(shù)中存在終端內(nèi)存相對(duì)緊張同時(shí)又對(duì)終端應(yīng)用的用戶體驗(yàn)要求很高的矛盾的問題。
[0007]根據(jù)本發(fā)明的一個(gè)方面,提供了一種終端內(nèi)存處理方法,包括:將所述終端內(nèi)存劃分為多個(gè)緩存區(qū)域;對(duì)所述多個(gè)緩存區(qū)域進(jìn)行分級(jí);依據(jù)分級(jí)后的所述緩存區(qū)域?qū)λ鼋K端內(nèi)存中的緩存對(duì)象進(jìn)行分級(jí)緩存處理。
[0008]優(yōu)選地,將所述終端內(nèi)存劃分為所述多個(gè)緩存區(qū)域包括:將所述終端內(nèi)存劃分為一級(jí)緩存區(qū)域和二級(jí)緩存區(qū)域,其中,所述一級(jí)緩存區(qū)域內(nèi)的緩存對(duì)象禁止被垃圾回收器回收,所述二級(jí)緩存區(qū)域內(nèi)的緩存對(duì)象在滿足預(yù)定存儲(chǔ)容量時(shí)被所述垃圾回收器回收。
[0009]優(yōu)選地,依據(jù)分級(jí)后的所述緩存區(qū)域?qū)λ鼋K端內(nèi)存中的緩存對(duì)象進(jìn)行分級(jí)緩存處理包括:判斷所述一級(jí)緩存區(qū)域內(nèi)緩存的對(duì)象是否超過預(yù)定容量;在判斷結(jié)果為是的情況下,將所述一級(jí)緩存區(qū)域內(nèi)緩存的緩存對(duì)象轉(zhuǎn)換為在所述二級(jí)緩存區(qū)域進(jìn)行緩存。
[0010]優(yōu)選地,將所述一級(jí)緩存區(qū)域內(nèi)緩存的對(duì)象轉(zhuǎn)換為在所述二級(jí)緩存區(qū)域進(jìn)行緩存包括:對(duì)所述一級(jí)緩存區(qū)域內(nèi)的緩存對(duì)象依據(jù)訪問量的多少進(jìn)行排序;優(yōu)先將所述一級(jí)緩存區(qū)域內(nèi)訪問量少的緩存對(duì)象轉(zhuǎn)換為在所述二級(jí)緩存區(qū)域內(nèi)進(jìn)行緩存。
[0011]優(yōu)選地,所述一級(jí)緩存區(qū)域采用鏈狀哈希映射LinkHashMap容器對(duì)所述一級(jí)緩存區(qū)域內(nèi)的緩存對(duì)象進(jìn)行緩存。
[0012]優(yōu)選地,所述二級(jí)緩存區(qū)域采用并行哈希映射ConcurrentHashMap容器對(duì)所述二級(jí)緩存區(qū)域內(nèi)的緩存對(duì)象進(jìn)行緩存。
[0013]根據(jù)本發(fā)明的另一方面,提供了一種終端內(nèi)存處理裝置,包括:劃分模塊,用于將所述終端內(nèi)存劃分為多個(gè)緩存區(qū)域;分級(jí)模塊,用于對(duì)所述多個(gè)緩存區(qū)域進(jìn)行分級(jí);緩存模塊,用于依據(jù)分級(jí)后的所述緩存區(qū)域?qū)λ鼋K端內(nèi)存中的緩存對(duì)象進(jìn)行分級(jí)緩存處理。
[0014]優(yōu)選地,所述劃分模塊包括:劃分單元,用于將所述終端內(nèi)存劃分為一級(jí)緩存區(qū)域和二級(jí)緩存區(qū)域,其中,所述一級(jí)緩存區(qū)域內(nèi)的緩存對(duì)象禁止被垃圾回收器回收,所述二級(jí)緩存區(qū)域內(nèi)的緩存對(duì)象在滿足預(yù)定存儲(chǔ)容量時(shí)被所述垃圾回收器回收。
[0015]優(yōu)選地,所述緩存模塊包括:判斷單元,用于判斷所述一級(jí)緩存區(qū)域內(nèi)緩存的對(duì)象是否超過預(yù)定容量;轉(zhuǎn)換單元,用于在所述判斷單元的判斷結(jié)果為是的情況下,將所述一級(jí)緩存區(qū)域內(nèi)緩存的緩存對(duì)象轉(zhuǎn)換為在所述二級(jí)緩存區(qū)域進(jìn)行緩存。
[0016]優(yōu)選地,所述轉(zhuǎn)換單元包括:排序子單元,用于對(duì)所述一級(jí)緩存區(qū)域內(nèi)的緩存對(duì)象依據(jù)訪問量的多少進(jìn)行排序;轉(zhuǎn)換子單元,用于優(yōu)先將所述一級(jí)緩存區(qū)域內(nèi)訪問量少的緩存對(duì)象轉(zhuǎn)換為在所述二級(jí)緩存區(qū)域內(nèi)進(jìn)行緩存。
[0017]根據(jù)本發(fā)明的再一方面,提供了一種終端,包括上述任一項(xiàng)所述的裝置。
[0018]通過本發(fā)明,采用將所述終端內(nèi)存劃分為多個(gè)緩存區(qū)域;對(duì)所述多個(gè)緩存區(qū)域進(jìn)行分級(jí);依據(jù)分級(jí)后的所述緩存區(qū)域?qū)λ鼋K端內(nèi)存中的緩存對(duì)象進(jìn)行分級(jí)緩存處理解決了相關(guān)技術(shù)中存在終端內(nèi)存相對(duì)緊張同時(shí)又對(duì)終端應(yīng)用的用戶體驗(yàn)要求很高的矛盾的問題,進(jìn)而達(dá)到了實(shí)現(xiàn)對(duì)內(nèi)存的高速緩存,有效解決內(nèi)存緊張與應(yīng)用體驗(yàn)相矛盾,提高用戶體驗(yàn)的效果。
【附圖說明】
[0019]此處所說明的附圖用來提供對(duì)本發(fā)明的進(jìn)一步理解,構(gòu)成本申請(qǐng)的一部分,本發(fā)明的示意性實(shí)施例及其說明用于解釋本發(fā)明,并不構(gòu)成對(duì)本發(fā)明的不當(dāng)限定。在附圖中:
[0020]圖1是根據(jù)本發(fā)明實(shí)施例的終端內(nèi)存處理方法的流程圖;
[0021]圖2是根據(jù)本發(fā)明實(shí)施例的終端內(nèi)存處理裝置的結(jié)構(gòu)框圖;
[0022]圖3是根據(jù)本發(fā)明實(shí)施例的終端內(nèi)存處理裝置中劃分模塊22的結(jié)構(gòu)框圖;
[0023]圖4是根據(jù)本發(fā)明實(shí)施例的終端內(nèi)存處理裝置中緩存模塊26的結(jié)構(gòu)框圖;
[0024]圖5是根據(jù)本發(fā)明實(shí)施例的終端內(nèi)存處理裝置中緩存模塊26中轉(zhuǎn)換單元44的結(jié)構(gòu)框圖;
[0025]圖6是根據(jù)本發(fā)明實(shí)施例的終端的結(jié)構(gòu)框圖。
【具體實(shí)施方式】
[0026]下文中將參考附圖并結(jié)合實(shí)施例來詳細(xì)說明本發(fā)明。需要說明的是,在不沖突的情況下,本申請(qǐng)中的實(shí)施例及實(shí)施例中的特征可以相互組合。
[0027]在本實(shí)施例中提供了一種終端內(nèi)存處理方法,圖1是根據(jù)本發(fā)明實(shí)施例的終端內(nèi)存處理方法的流程圖,如圖1所示,該流程包括如下步驟:
[0028]步驟S102,將終端內(nèi)存劃分為多個(gè)緩存區(qū)域;
[0029]步驟S104,對(duì)該多個(gè)緩存區(qū)域進(jìn)行分級(jí);
[0030]步驟S106,依據(jù)分級(jí)后的緩存區(qū)域?qū)K端內(nèi)存中的緩存對(duì)象進(jìn)行分級(jí)緩存處理。
[0031]通過上述步驟,對(duì)終端內(nèi)存中的緩存區(qū)域進(jìn)行分級(jí),依據(jù)分級(jí)后的緩存區(qū)域?qū)彺鎸?duì)象進(jìn)行分級(jí)緩存,相對(duì)于相關(guān)技術(shù)中僅采用完全固定緩存或是完全不固定軟引用的緩存來說,采用對(duì)緩存區(qū)域進(jìn)行有區(qū)分地緩存對(duì)象,不僅解決了相關(guān)技術(shù)中浪費(fèi)內(nèi)存或是嚴(yán)重影響用戶體驗(yàn)的問題,即存在終端內(nèi)存相對(duì)緊張同時(shí)又對(duì)終端應(yīng)用的用戶體驗(yàn)要求很高的矛盾的問題,進(jìn)而達(dá)到了實(shí)現(xiàn)對(duì)內(nèi)存的高速緩存,有效解決內(nèi)存緊張與應(yīng)用體驗(yàn)相矛盾,提高用戶體驗(yàn)的效果。
[0032]優(yōu)選地,將終端內(nèi)存劃分為多個(gè)緩存區(qū)域時(shí),可以依據(jù)具體的需要將終端內(nèi)存劃分為對(duì)應(yīng)數(shù)目的緩存區(qū)域,依據(jù)劃分后的緩存區(qū)域分別進(jìn)行對(duì)應(yīng)處理,例如,可以將終端內(nèi)存劃分為一級(jí)緩存區(qū)域和二級(jí)緩存區(qū)域,其中,一級(jí)緩存區(qū)域內(nèi)的緩存對(duì)象禁止被垃圾回收器回收,二級(jí)緩存區(qū)域內(nèi)的緩存對(duì)象在滿足預(yù)定存儲(chǔ)容量時(shí)被垃圾回收器回收。即將終端內(nèi)存劃分為可以對(duì)緩存對(duì)象實(shí)行不同緩存處理的緩存區(qū)域,即實(shí)現(xiàn)對(duì)緩存對(duì)象實(shí)行不同的緩存處理。
[0033]依據(jù)分級(jí)后的緩存區(qū)域?qū)K端內(nèi)存中的緩存對(duì)象進(jìn)行分級(jí)緩存處理時(shí),也可以采用多種方式,例如,可以先給一級(jí)緩存區(qū)域設(shè)置一個(gè)緩存容量(即在該一級(jí)緩存區(qū)域內(nèi)不能緩存超過該容量),之后,判斷一級(jí)緩存區(qū)域內(nèi)緩存的對(duì)象是否超過預(yù)定容量;在判斷結(jié)果為是的情況下,將一級(jí)緩存區(qū)域內(nèi)緩存的緩存對(duì)象轉(zhuǎn)換為在二級(jí)緩存區(qū)域進(jìn)行緩存。而在將一級(jí)緩存區(qū)域內(nèi)緩存的對(duì)象轉(zhuǎn)換為在二級(jí)緩存區(qū)域進(jìn)行緩存時(shí),也可以依據(jù)具體的考慮因素,對(duì)一級(jí)緩存區(qū)域中的緩存對(duì)象實(shí)行有選擇地轉(zhuǎn)換為在該二級(jí)緩存區(qū)域中進(jìn)行緩存,例如,該考慮因素可以為緩存對(duì)象的重要程度,緩存對(duì)象的訪問量等,比如,可以對(duì)一級(jí)緩存區(qū)域內(nèi)的緩存對(duì)象依據(jù)訪問量的多少進(jìn)行排序;優(yōu)先將一級(jí)緩存區(qū)域內(nèi)訪問量少的緩存對(duì)象轉(zhuǎn)換為在二級(jí)緩存區(qū)域內(nèi)進(jìn)行緩存。
[0034]需要說明的是,上述一級(jí)緩存區(qū)域以及二級(jí)緩存區(qū)域可以采用多種緩存容器對(duì)緩存對(duì)象進(jìn)行存儲(chǔ),例如,由于鏈狀哈希映射LinkHashMap容器可以對(duì)緩存對(duì)象具有一定的排序功能,因此,由于一級(jí)緩存區(qū)域可以采用鏈狀哈希映射LinkHashMap容器對(duì)一級(jí)緩存區(qū)域內(nèi)的緩存對(duì)象進(jìn)行緩存。由于并行哈希映射ConcurrentHashMap容器可以對(duì)緩存對(duì)象進(jìn)行高效的并行