国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種內(nèi)存釋放方法及裝置與流程

      文檔序號(hào):11154894閱讀:431來(lái)源:國(guó)知局
      一種內(nèi)存釋放方法及裝置與制造工藝

      技術(shù)領(lǐng)域

      本發(fā)明涉及移動(dòng)終端開(kāi)發(fā)技術(shù),尤其涉及一種內(nèi)存釋放方法及裝置。



      背景技術(shù):

      移動(dòng)終端的內(nèi)存通常指移動(dòng)終端的物理內(nèi)存,當(dāng)存在應(yīng)用進(jìn)程時(shí),移動(dòng)終端會(huì)分配一部分物理內(nèi)存給該應(yīng)用進(jìn)程,則這部分物理內(nèi)存成為進(jìn)程可使用內(nèi)存,通常分配在托管堆上,由移動(dòng)終端通過(guò)垃圾回收(Garbage Collection,GC)來(lái)管理,當(dāng)移動(dòng)終端的物理內(nèi)存不足時(shí),移動(dòng)終端會(huì)根據(jù)垃圾回收(Garbage Collection,GC)策略清除一些沒(méi)有被引用到的對(duì)象,釋放空間,以解決內(nèi)存不足(out of memory,OOM)的問(wèn)題。然而在進(jìn)行與緩存文件相關(guān)的操作時(shí),經(jīng)常會(huì)出現(xiàn)OOM的問(wèn)題,且很難通過(guò)GC策略解決。以位圖(Bitmap)文件為例,當(dāng)需要在一個(gè)界面上顯示數(shù)十張圖片乃至上百?gòu)垐D片時(shí),即使使用類似于列表或者網(wǎng)絡(luò)的控件來(lái)實(shí)現(xiàn),限定一次顯示的圖片數(shù)量的上限,并在當(dāng)圖片較多時(shí)采用縮略圖策略,當(dāng)多次在一個(gè)界面上顯示數(shù)目較多的圖片,也會(huì)使大量?jī)?nèi)存一直被引用,移動(dòng)終端無(wú)法通過(guò)GC策略完成回收,也很容易出現(xiàn)內(nèi)存不足的問(wèn)題。

      目前,對(duì)于進(jìn)行文件相關(guān)操作時(shí)出現(xiàn)的內(nèi)存不足的問(wèn)題,存在三種解決方案。

      第一種解決方案,將文件存儲(chǔ)為軟引用(SoftReference)對(duì)象。軟引用是一種需要通過(guò)SoftReference類來(lái)實(shí)現(xiàn)的引用方式,若一個(gè)對(duì)象為軟引用對(duì)象,當(dāng)移動(dòng)終端出現(xiàn)OOM時(shí),移動(dòng)終端根據(jù)GC策略一定會(huì)回收該對(duì)象。

      這種方法的弊端在于,在一個(gè)界面上顯示大量文件時(shí),由于文件設(shè)置為軟引用對(duì)象,當(dāng)移動(dòng)終端內(nèi)存不足時(shí),會(huì)被回收,導(dǎo)致在一個(gè)界面上的大量文件需要被重復(fù)解析,系統(tǒng)處理效率低,影響用戶體驗(yàn)。

      第二種解決方案,在內(nèi)存中加載文件時(shí)對(duì)文件進(jìn)行邊界壓縮。

      這種方法的弊端在于,當(dāng)需要在同一界面上顯示大量的文件時(shí),依然無(wú)法解決OOM問(wèn)題。

      第三種解決方案,若顯示文件時(shí)需要大量的內(nèi)存,則將存儲(chǔ)文件的托管堆的大小調(diào)大。

      這種方法的弊端在于,在內(nèi)存一定的情況下,將存儲(chǔ)文件的托管堆的大小調(diào)大,勢(shì)必會(huì)影響其他模塊的正常使用。

      這三種解決方案,均不能在避免影響移動(dòng)終端的正常使用的情況下有效的解決OOM問(wèn)題。



      技術(shù)實(shí)現(xiàn)要素:

      本發(fā)明實(shí)施例提供一種內(nèi)存釋放方法及裝置,以實(shí)現(xiàn)在避免影響移動(dòng)終端的正常使用的情況下有效的解決OOM問(wèn)題。

      一種內(nèi)存釋放方法,包括:

      對(duì)文件逐一進(jìn)行解碼,并將解碼成功的文件逐一存儲(chǔ)在第一緩存區(qū)中;

      當(dāng)確定所述第一緩存區(qū)中剩余存儲(chǔ)空間不足時(shí),將所述第一緩存區(qū)中存儲(chǔ)時(shí)間最長(zhǎng)的解碼成功的文件轉(zhuǎn)存到第二緩存區(qū);

      當(dāng)確定存在內(nèi)存不足OOM時(shí),將第二緩存區(qū)中存儲(chǔ)的解碼成功的文件刪除。

      一種內(nèi)存釋放裝置,包括:

      存儲(chǔ)單元,用于對(duì)文件逐一進(jìn)行解碼,并將解碼成功的文件逐一存儲(chǔ)在第一緩存區(qū)中;

      轉(zhuǎn)存單元,用于當(dāng)確定所述第一緩存區(qū)中剩余存儲(chǔ)空間不足時(shí),將所述第一緩存區(qū)中存儲(chǔ)時(shí)間最長(zhǎng)的解碼成功的文件轉(zhuǎn)存到第二緩存區(qū);

      刪除單元,用于當(dāng)確定存在內(nèi)存不足OOM時(shí),將第二緩存區(qū)中存儲(chǔ)的解碼成功的文件刪除。

      本發(fā)明實(shí)施例提供一種內(nèi)存釋放方法及裝置,對(duì)文件進(jìn)行解碼后,先將解碼成功的文件存儲(chǔ)在第一緩存區(qū)中,在第一緩存區(qū)中剩余存儲(chǔ)空間不足時(shí),當(dāng)需要存儲(chǔ)新的解碼成功的文件時(shí),將第一緩存區(qū)中存儲(chǔ)時(shí)間最長(zhǎng)的解碼成功的文件轉(zhuǎn)存到第二緩存區(qū)中,當(dāng)確定存在OOM時(shí),將第二緩存區(qū)中的解碼成功的文件刪除,因?yàn)榈诙彺鎱^(qū)中存儲(chǔ)的文件為存儲(chǔ)時(shí)間較長(zhǎng)的文件,調(diào)用的概率較小,因此在存在OOM時(shí)刪除第二緩存區(qū)中存儲(chǔ)的文件不會(huì)影響移動(dòng)終端的正常使用,且能夠有效的解決OOM問(wèn)題,從而實(shí)現(xiàn)了在避免影響移動(dòng)終端的正常使用的情況下有效的解決OOM問(wèn)題。

      附圖說(shuō)明

      圖1為本發(fā)明實(shí)施例提供的一種內(nèi)存釋放方法流程圖之一;

      圖2為本發(fā)明實(shí)施例提供的一種鏈表哈希映射結(jié)構(gòu)示意圖;

      圖3為本發(fā)明實(shí)施例提供的一種內(nèi)存釋放方法流程圖之二;

      圖4為本發(fā)明實(shí)施例提供的一種較佳的內(nèi)存釋放的方法流程圖;

      圖5為本發(fā)明實(shí)施例提供的一種內(nèi)存釋放裝置結(jié)構(gòu)示意圖之一;

      圖6為本發(fā)明實(shí)施例提供的一種內(nèi)存釋放裝置結(jié)構(gòu)示意圖之二。

      具體實(shí)施方式

      本發(fā)明實(shí)施例提供一種內(nèi)存釋放方法及裝置,對(duì)文件進(jìn)行解碼后,先將解碼成功的文件存儲(chǔ)在第一緩存區(qū)中,在第一緩存區(qū)中剩余存儲(chǔ)空間不足時(shí),當(dāng)需要存儲(chǔ)新的解碼成功的文件時(shí),將第一緩存區(qū)中存儲(chǔ)時(shí)間最長(zhǎng)的解碼成功的文件轉(zhuǎn)存到第二緩存區(qū)中,當(dāng)確定存在OOM時(shí),將第二緩存區(qū)中的解碼成功的文件刪除,因?yàn)榈诙彺鎱^(qū)中存儲(chǔ)的文件為存儲(chǔ)時(shí)間較長(zhǎng)的文件,調(diào)用的概率較小,因此在存在OOM時(shí)刪除第二緩存區(qū)中存儲(chǔ)的文件不會(huì)影響移動(dòng)終端的正常使用,且能夠有效的解決OOM問(wèn)題,從而實(shí)現(xiàn)了在避免影響移動(dòng)終端的正常使用的情況下有效的解決OOM問(wèn)題。

      如圖1所示,本發(fā)明實(shí)施例提供一種內(nèi)存釋放方法,包括:

      S101、對(duì)文件逐一進(jìn)行解碼,并將解碼成功的文件逐一存儲(chǔ)在第一緩存區(qū)中;

      S102、當(dāng)確定第一緩存區(qū)中剩余存儲(chǔ)空間不足時(shí),將第一緩存區(qū)中存儲(chǔ)時(shí)間最長(zhǎng)的解碼成功的文件轉(zhuǎn)存到第二緩存區(qū);

      S103、當(dāng)確定存在OOM時(shí),將第二緩存區(qū)中存儲(chǔ)的解碼成功的文件刪除。

      本發(fā)明實(shí)施例設(shè)置了兩個(gè)文件緩存區(qū),對(duì)文件進(jìn)行解碼后,將解碼成功的文件存儲(chǔ)在第一緩存區(qū)內(nèi),當(dāng)確定第一緩存區(qū)中剩余的存儲(chǔ)空間不足時(shí),則將第一緩存區(qū)中存儲(chǔ)時(shí)間最長(zhǎng)的解碼成功的文件轉(zhuǎn)存到第二緩存區(qū)中。當(dāng)存在OOM問(wèn)題時(shí),將第二緩存區(qū)中存儲(chǔ)的解碼成功的文件刪除,由于刪除的是存儲(chǔ)時(shí)間較長(zhǎng),即調(diào)用概率較小的文件,因此不會(huì)影響移動(dòng)終端的正常使用,同時(shí),也有效的解決了OOM問(wèn)題。

      其中被解碼的文件可以為位圖文件。

      較佳的,為了方便實(shí)現(xiàn)S102,可以將第一緩存區(qū)設(shè)置為鏈表哈希映射(LinkedHashMap)式緩存區(qū),如圖2所示,LinkedHashMap具有先進(jìn)先出的特點(diǎn),將第一緩存區(qū)設(shè)置為L(zhǎng)inkedHashMap式緩存區(qū),并預(yù)先設(shè)定第一緩存區(qū)能夠存儲(chǔ)的文件的最多個(gè)數(shù),則在第一緩存區(qū)中存儲(chǔ)的解碼成功的文件的個(gè)數(shù)達(dá)到設(shè)定個(gè)數(shù)后,若需要繼續(xù)在第一緩存區(qū)中存儲(chǔ)解碼成功的文件,第一緩存區(qū)中存儲(chǔ)時(shí)間最久的文件由于是最先進(jìn)入第一緩存區(qū)的,此時(shí)就會(huì)從第一緩存區(qū)中移出,被轉(zhuǎn)存到第二緩存區(qū)中。

      本領(lǐng)域的技術(shù)人員也可以將第二緩存區(qū)設(shè)置為并發(fā)式哈希映射(ConcurrentHashMap)式緩存區(qū),ConcurrentHashMap可以同時(shí)接受多個(gè)進(jìn)程的訪問(wèn),能夠有效的加快移動(dòng)終端的處理速度。

      其中,第一緩存區(qū)及第二緩存區(qū)的大小可以由本領(lǐng)域技術(shù)人員根據(jù)經(jīng)驗(yàn)及移動(dòng)終端總內(nèi)存的大小自行設(shè)定,例如,當(dāng)移動(dòng)終端的總內(nèi)存大小為1G時(shí),可以將第一緩存區(qū)的內(nèi)存大小設(shè)置為能夠存儲(chǔ)12-20個(gè)解碼成功的文件,將第二緩存區(qū)的內(nèi)存大小設(shè)置為能夠存儲(chǔ)6-10個(gè)解碼成功的文件,較佳的,可以將第一緩存區(qū)的內(nèi)存大小設(shè)置為能夠存儲(chǔ)16個(gè)解碼成功的文件,將第二緩存區(qū)的內(nèi)存大小設(shè)置為能夠存儲(chǔ)8個(gè)解碼成功的文件,當(dāng)移動(dòng)終端的總內(nèi)存大小為2G時(shí),可以將第一緩存區(qū)的內(nèi)存大小設(shè)置為能夠存儲(chǔ)24-40個(gè)解碼成功的文件,將第二緩存區(qū)的內(nèi)存大小設(shè)置為能夠存儲(chǔ)12-20個(gè)解碼成功的文件,較佳的,可以將第一緩存區(qū)的內(nèi)存大小設(shè)置為能夠存儲(chǔ)32個(gè)解碼成功的文件,將第二緩存區(qū)的內(nèi)存大小設(shè)置為能夠存儲(chǔ)16個(gè)解碼成功的文件。

      當(dāng)然,本領(lǐng)域的技術(shù)人員可以采用其他可行方式設(shè)置第一緩存區(qū)及第二緩存區(qū),此處不再一一敘述。

      具體的,S102中確定第一緩存區(qū)中剩余存儲(chǔ)空間不足,具體包括:

      確定需要存儲(chǔ)的新的解碼成功的文件大小大于所述第一緩存區(qū)中的未使用的內(nèi)存大小時(shí);或者

      確定所述第一緩存區(qū)中存儲(chǔ)的解碼成功的文件個(gè)數(shù)已達(dá)到設(shè)定個(gè)數(shù)。

      實(shí)際應(yīng)用中,當(dāng)需要存儲(chǔ)新的解碼成功的文件時(shí),可以首先判斷第一緩存區(qū)中未使用內(nèi)存大小是否大于需要存儲(chǔ)的新的解碼成功的文件的大小,若需要存儲(chǔ)的新的解碼成功的文件的大小大于第一緩存區(qū)中未使用內(nèi)存的大小,例如需要存儲(chǔ)的新的解碼成功的文件的大小為30M,而第一緩存區(qū)中的剩余存儲(chǔ)空間為20M,則確定第一緩存去中剩余存儲(chǔ)空間不足,需要將第一緩存區(qū)中存儲(chǔ)時(shí)間最長(zhǎng)的解碼成功的文件轉(zhuǎn)存到第二緩存區(qū)中去?;蛘撸A(yù)先設(shè)定第一緩存區(qū)能夠存儲(chǔ)的解碼成功的文件的最大個(gè)數(shù),當(dāng)需要存儲(chǔ)新的解碼成功的文件時(shí),可以首先判斷第一緩存區(qū)中存儲(chǔ)的解碼成功的文件的個(gè)數(shù)是否達(dá)到第一緩存區(qū)中能夠存儲(chǔ)的解碼成功的文件的最大個(gè)數(shù),若第一緩存區(qū)中存儲(chǔ)的解碼成功的文件個(gè)數(shù)達(dá)到第一緩存區(qū)能夠存儲(chǔ)的解碼成功的文件的最大個(gè)數(shù),例如設(shè)定的第一緩存區(qū)能夠存儲(chǔ)的解碼成功的文件的個(gè)數(shù)為16個(gè),則在需要存儲(chǔ)新的解碼成功的文件時(shí),若確定了第一緩存區(qū)中已存儲(chǔ)了16個(gè)解碼成功的文件,則需要先將第一緩存區(qū)中存儲(chǔ)時(shí)間最久的解碼成功的文件轉(zhuǎn)存到第二緩存區(qū)中,再將新的解碼成功的文件存儲(chǔ)到第一緩存區(qū)中去。

      具體的,S103中確定存在OOM,包括:

      確定所述第二緩存區(qū)中未使用的內(nèi)存大小小于當(dāng)前需要轉(zhuǎn)存到所述第二緩存區(qū)的解碼成功的文件大小。

      實(shí)際應(yīng)用中,若需要轉(zhuǎn)存到第二緩存區(qū)中的解碼成功的文件的大小大于第二緩存區(qū)中未使用的內(nèi)存大小,則可以確定出現(xiàn)了OOM,此時(shí),可以先將第二緩存區(qū)中緩存的解碼成功的文件刪除,再將需要轉(zhuǎn)存到第二緩存區(qū)中的解碼成功的文件存儲(chǔ)到第二緩存區(qū)中去。

      進(jìn)一步,由于軟引用是一種需要通過(guò)SoftReference類來(lái)實(shí)現(xiàn)的引用方式,若一個(gè)對(duì)象為軟引用對(duì)象,當(dāng)移動(dòng)終端出現(xiàn)OOM時(shí),移動(dòng)終端通常會(huì)刪除該對(duì)象。因此可以將第二存儲(chǔ)區(qū)中存儲(chǔ)的文件存儲(chǔ)為軟引用對(duì)象,并設(shè)定當(dāng)出現(xiàn)OOM時(shí),移動(dòng)終端將軟引用對(duì)象刪除,從而解決OOM的問(wèn)題。具體的,S102中將第一緩存區(qū)中存儲(chǔ)時(shí)間最長(zhǎng)的解碼成功的文件轉(zhuǎn)存到第二緩存區(qū),具體為:

      將第一緩存區(qū)中存儲(chǔ)時(shí)間最長(zhǎng)的解碼成功的文件轉(zhuǎn)存到第二緩存區(qū),并存儲(chǔ)成軟引用對(duì)象;

      則S103具體為:

      當(dāng)確定存在OOM時(shí),將軟引用對(duì)象刪除。

      當(dāng)然,本領(lǐng)域的技術(shù)人員可以采用其他可行方式在第二存儲(chǔ)區(qū)中存儲(chǔ)解碼成功的文件;當(dāng)然,本領(lǐng)域的技術(shù)人員也可以通過(guò)其他可行方式實(shí)現(xiàn)S103,此處僅提供一種較佳的實(shí)現(xiàn)方式,不再一一敘述。

      解碼成功的文件被存儲(chǔ)到第一緩存區(qū)或第二緩存區(qū)后,當(dāng)需要獲取文件時(shí),可以先在第一緩存區(qū)中查找需要獲取的文件,若確定第一緩存區(qū)中不存在需要獲取的文件,則在第二緩存區(qū)中進(jìn)行查找,當(dāng)確定第二緩存區(qū)中不存在需要獲取的文件時(shí),可以對(duì)需要獲取的文件進(jìn)行解碼,具體的,如圖3所示,本發(fā)明實(shí)施例提供的內(nèi)存釋放方法還包括:

      S301、確定需要獲取解碼成功的文件時(shí),在第一緩存區(qū)中查找需獲取的解碼成功的文件;

      S302、確定第一緩存區(qū)中不存在需要獲取的解碼成功的文件時(shí),在第二緩存區(qū)中查找需獲取的解碼成功的文件;

      S303、確定第二緩存區(qū)中不存在需要獲取的解碼成功的文件時(shí),對(duì)需要獲取的解碼成功的文件所對(duì)應(yīng)的原文件進(jìn)行解碼。

      本發(fā)明實(shí)施例提供一種較佳的內(nèi)存釋放方法,如圖4所示,該方法包括:

      S401、對(duì)文件進(jìn)行解碼,并將解碼成功的文件存儲(chǔ)在LinkedHashMap緩存區(qū)中;

      S402、在LinkedHashMap緩存區(qū)中存儲(chǔ)的解碼成功的文件的個(gè)數(shù)達(dá)到設(shè)定個(gè)數(shù)后,當(dāng)需要存儲(chǔ)新的解碼成功的文件時(shí),將LinkedHashMap緩存區(qū)中存儲(chǔ)時(shí)間最長(zhǎng)的解碼成功的文件轉(zhuǎn)存到ConcurrentHashMap緩存區(qū);

      S403、當(dāng)確定存在OOM時(shí),將ConcurrentHashMap緩存區(qū)中存儲(chǔ)的解碼成功的文件刪除。

      S404、確定需要獲取文件時(shí),在LinkedHashMap緩存區(qū)中查找需獲取的解碼成功的文件;

      S405、確定LinkedHashMap緩存區(qū)中不存在需要獲取的解碼成功的文件時(shí),在ConcurrentHashMap緩存區(qū)中查找需獲取的解碼成功的文件;

      S406、確定ConcurrentHashMap緩存區(qū)中不存在需要獲取的解碼成功的文件時(shí),對(duì)需要獲取的解碼成功的文件的所對(duì)應(yīng)的原文件進(jìn)行解碼。

      如圖5所示,本發(fā)明實(shí)施例提供一種內(nèi)存釋放裝置,包括:

      存儲(chǔ)單元501,用于對(duì)文件逐一進(jìn)行解碼,并將解碼成功的文件逐一存儲(chǔ)在第一緩存區(qū)中;

      轉(zhuǎn)存單元502,用于當(dāng)確定第一緩存區(qū)中剩余存儲(chǔ)空間不足時(shí),將第一緩存區(qū)中存儲(chǔ)時(shí)間最長(zhǎng)的解碼成功的文件轉(zhuǎn)存到第二緩存區(qū);

      刪除單元503,用于當(dāng)確定存在OOM時(shí),將第二緩存區(qū)中存儲(chǔ)的解碼成功的文件刪除。

      本發(fā)明實(shí)施例設(shè)置了兩個(gè)文件緩存區(qū),對(duì)文件進(jìn)行解碼后,將解碼成功的文件存儲(chǔ)在第一緩存區(qū)內(nèi),當(dāng)確定第一緩存區(qū)中剩余的存儲(chǔ)空間不足時(shí),則將第一緩存區(qū)中存儲(chǔ)時(shí)間最長(zhǎng)的解碼成功的文件轉(zhuǎn)存到第二緩存區(qū)中。當(dāng)存在OOM問(wèn)題時(shí),將第二緩存區(qū)中存儲(chǔ)的解碼成功的文件刪除,由于刪除的是存儲(chǔ)時(shí)間較長(zhǎng),即調(diào)用頻率較低的文件,因此不會(huì)影響移動(dòng)終端的正常使用,同時(shí),也有效的解決了OOM問(wèn)題。

      較佳的,為了更方便實(shí)現(xiàn)在第一緩存區(qū)中存儲(chǔ)的解碼成功的文件的個(gè)數(shù)達(dá)到設(shè)定個(gè)數(shù)后,當(dāng)需要存儲(chǔ)新的解碼成功的文件時(shí),將第一緩存區(qū)中存儲(chǔ)時(shí)間最長(zhǎng)的解碼成功的文件轉(zhuǎn)存到第二緩存區(qū),可以將第一緩存區(qū)設(shè)置為鏈表哈希映射(LinkedHashMap)式緩存區(qū),LinkedHashMap具有先進(jìn)先出的特點(diǎn),將第一緩存區(qū)設(shè)置為L(zhǎng)inkedHashMap式緩存區(qū),并預(yù)先設(shè)定第一緩存區(qū)能夠存儲(chǔ)的文件的最多個(gè)數(shù),則在第一緩存區(qū)中存儲(chǔ)的解碼成功的文件的個(gè)數(shù)達(dá)到設(shè)定個(gè)數(shù)后,若需要繼續(xù)在第一緩存區(qū)中存儲(chǔ)解碼成功的文件,第一緩存區(qū)中存儲(chǔ)時(shí)間最久的文件由于是最先進(jìn)入第一緩存區(qū)的,此時(shí)就會(huì)從第一緩存區(qū)中移出,被轉(zhuǎn)存到第二緩存區(qū)中。

      本領(lǐng)域的技術(shù)人員也可以將第二緩存區(qū)設(shè)置為并發(fā)式哈希映射(ConcurrentHashMap)式緩存區(qū),ConcurrentHashMap可以同時(shí)接受多個(gè)進(jìn)程的訪問(wèn),能夠有效的加快移動(dòng)終端的處理速度。

      當(dāng)然,本領(lǐng)域的技術(shù)人員可以采用其他可行方式設(shè)置第一緩存區(qū)及第二緩存區(qū),此處不再一一敘述。

      其中,第一緩存區(qū)及第二緩存區(qū)的大小可以由本領(lǐng)域技術(shù)人員根據(jù)經(jīng)驗(yàn)及移動(dòng)終端總內(nèi)存的大小自行設(shè)定,例如,當(dāng)移動(dòng)終端的總內(nèi)存大小為1G時(shí),可以將第一緩存區(qū)的內(nèi)存大小設(shè)置為能夠存儲(chǔ)12-20個(gè)解碼成功的文件,將第二緩存區(qū)的內(nèi)存大小設(shè)置為能夠存儲(chǔ)6-10個(gè)解碼成功的文件,較佳的,可以將第一緩存區(qū)的內(nèi)存大小設(shè)置為能夠存儲(chǔ)16個(gè)解碼成功的文件,將第二緩存區(qū)的內(nèi)存大小設(shè)置為能夠存儲(chǔ)8個(gè)解碼成功的文件,當(dāng)移動(dòng)終端的總內(nèi)存大小為2G時(shí),可以將第一緩存區(qū)的內(nèi)存大小設(shè)置為能夠存儲(chǔ)24-40個(gè)解碼成功的文件,將第二緩存區(qū)的內(nèi)存大小設(shè)置為能夠存儲(chǔ)12-20個(gè)解碼成功的文件,較佳的,可以將第一緩存區(qū)的內(nèi)存大小設(shè)置為能夠存儲(chǔ)32個(gè)解碼成功的文件,將第二緩存區(qū)的內(nèi)存大小設(shè)置為能夠存儲(chǔ)16個(gè)解碼成功的文件。

      具體的,轉(zhuǎn)存單元502確定第一緩存區(qū)中剩余存儲(chǔ)空間不足,具體用于:

      確定需要存儲(chǔ)的新的解碼成功的文件大小大于第一緩存區(qū)中的未使用的內(nèi)存大?。换蛘?/p>

      確定第一緩存區(qū)中存儲(chǔ)的解碼成功的文件個(gè)數(shù)已達(dá)到設(shè)定個(gè)數(shù)時(shí)。

      實(shí)際應(yīng)用中,當(dāng)需要存儲(chǔ)新的解碼成功的文件時(shí),可以首先判斷第一緩存區(qū)中未使用內(nèi)存大小是否大于需要存儲(chǔ)的新的解碼成功的文件的大小,若需要存儲(chǔ)的新的解碼成功的文件的大小大于第一緩存區(qū)中未使用內(nèi)存的大小,例如需要存儲(chǔ)的新的解碼成功的文件的大小為30M,而第一緩存區(qū)中的剩余存儲(chǔ)空間為20M,則確定第一緩存去中剩余存儲(chǔ)空間不足,需要將第一緩存區(qū)中存儲(chǔ)時(shí)間最長(zhǎng)的解碼成功的文件轉(zhuǎn)存到第二緩存區(qū)中去。或者,預(yù)先設(shè)定第一緩存區(qū)能夠存儲(chǔ)的解碼成功的文件的最大個(gè)數(shù),當(dāng)需要存儲(chǔ)新的解碼成功的文件時(shí),可以首先判斷第一緩存區(qū)中存儲(chǔ)的解碼成功的文件的個(gè)數(shù)是否達(dá)到第一緩存區(qū)中能夠存儲(chǔ)的解碼成功的文件的最大個(gè)數(shù),若第一緩存區(qū)中存儲(chǔ)的解碼成功的文件個(gè)數(shù)達(dá)到第一緩存區(qū)能夠存儲(chǔ)的解碼成功的文件的最大個(gè)數(shù),例如設(shè)定的第一緩存區(qū)能夠存儲(chǔ)的解碼成功的文件的個(gè)數(shù)為16個(gè),則在需要存儲(chǔ)新的解碼成功的文件時(shí),若確定了第一緩存區(qū)中已存儲(chǔ)了16個(gè)解碼成功的文件,則需要先將第一緩存區(qū)中存儲(chǔ)時(shí)間最久的解碼成功的文件轉(zhuǎn)存到第二緩存區(qū)中,再將新的解碼成功的文件存儲(chǔ)到第一緩存區(qū)中去。

      具體的,刪除單元503確定存在OOM,用于:

      確定第二緩存區(qū)中未使用的內(nèi)存大小小于當(dāng)前需要轉(zhuǎn)存到所述第二緩存區(qū)的解碼成功的文件大小。

      實(shí)際應(yīng)用中,若需要轉(zhuǎn)存到第二緩存區(qū)中的解碼成功的文件的大小大于第二緩存區(qū)中未使用的內(nèi)存大小,則可以確定出現(xiàn)了OOM,此時(shí),可以先將第二緩存區(qū)中緩存的解碼成功的文件刪除,再將需要轉(zhuǎn)存到第二緩存區(qū)中的解碼成功的文件存儲(chǔ)到第二緩存區(qū)中去。

      進(jìn)一步,由于軟引用是一種需要通過(guò)SoftReference類來(lái)實(shí)現(xiàn)的引用方式,若一個(gè)對(duì)象為軟引用對(duì)象,當(dāng)移動(dòng)終端出現(xiàn)OOM時(shí),移動(dòng)終端通常會(huì)刪除該對(duì)象。因此可以將第二存儲(chǔ)區(qū)中存儲(chǔ)的文件存儲(chǔ)為軟引用對(duì)象,并設(shè)定當(dāng)出現(xiàn)OOM時(shí),移動(dòng)終端將軟引用對(duì)象刪除,從而解決OOM的問(wèn)題。具體的,轉(zhuǎn)存單元502將第一緩存區(qū)中存儲(chǔ)時(shí)間最長(zhǎng)的解碼成功的文件轉(zhuǎn)存到第二緩存區(qū),具體用于:

      將第一緩存區(qū)中存儲(chǔ)時(shí)間最長(zhǎng)的解碼成功的文件轉(zhuǎn)存到第二緩存區(qū),并存儲(chǔ)成軟引用對(duì)象;

      則刪除單元503具體用于:

      當(dāng)確定存在OOM時(shí),將軟引用對(duì)象刪除。

      當(dāng)然,本領(lǐng)域的技術(shù)人員可以采用其他可行方式在第二存儲(chǔ)區(qū)中存儲(chǔ)解碼成功的文件;當(dāng)然,本領(lǐng)域的技術(shù)人員也可以通過(guò)其他可行方式實(shí)現(xiàn)刪除單元503,此處僅提供一種較佳的實(shí)現(xiàn)方式,不再一一敘述。

      解碼成功的文件被存儲(chǔ)到第一緩存區(qū)或第二緩存區(qū)后,當(dāng)需要獲取文件時(shí),可以先在第一緩存區(qū)中查找需要獲取的文件,若確定第一緩存區(qū)中不存在需要獲取的文件,則在第二緩存區(qū)中進(jìn)行查找,當(dāng)確定第二緩存區(qū)中不存在需要獲取的文件時(shí),再對(duì)需要獲取的文件進(jìn)行解碼,具體的,如圖6所示,本發(fā)明實(shí)施例提供的內(nèi)存釋放裝置還包括:

      第一查找單元504,用于確定需要獲取解碼成功的文件時(shí),在第一緩存區(qū)中查找需獲取的解碼成功的文件;

      第二查找單元505,用于確定第一緩存區(qū)中不存在需要獲取的解碼成功的文件時(shí),在第二緩存區(qū)中查找需獲取的解碼成功的文件;

      解碼單元506,用于確定第二緩存區(qū)中不存在需要獲取的解碼成功的文件時(shí),對(duì)需要獲取的解碼成功的文件所對(duì)應(yīng)的原文件進(jìn)行解碼。

      本發(fā)明實(shí)施例提供一種內(nèi)存釋放方法及裝置,對(duì)文件進(jìn)行解碼后,先將解碼成功的文件存儲(chǔ)在第一緩存區(qū)中,在第一緩存區(qū)中剩余存儲(chǔ)空間不足時(shí),當(dāng)需要存儲(chǔ)新的解碼成功的文件時(shí),將第一緩存區(qū)中存儲(chǔ)時(shí)間最長(zhǎng)的解碼成功的文件轉(zhuǎn)存到第二緩存區(qū)中,當(dāng)確定存在OOM時(shí),將第二緩存區(qū)中的解碼成功的文件刪除,因?yàn)榈诙彺鎱^(qū)中存儲(chǔ)的文件為存儲(chǔ)時(shí)間較長(zhǎng)的文件,調(diào)用的概率較小,因此在存在OOM時(shí)刪除第二緩存區(qū)中存儲(chǔ)的文件不會(huì)影響移動(dòng)終端的正常使用,且能夠有效的解決OOM問(wèn)題,從而實(shí)現(xiàn)了在避免影響移動(dòng)終端的正常使用的情況下有效的解決OOM問(wèn)題。

      本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本發(fā)明的實(shí)施例可提供為方法、系統(tǒng)、或計(jì)算機(jī)程序產(chǎn)品。因此,本發(fā)明可采用完全硬件實(shí)施例、完全軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本發(fā)明可采用在一個(gè)或多個(gè)其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲(chǔ)介質(zhì)(包括但不限于磁盤存儲(chǔ)器、CD-ROM、光學(xué)存儲(chǔ)器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。

      本發(fā)明是參照根據(jù)本發(fā)明實(shí)施例的方法、設(shè)備(系統(tǒng))、和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或方框圖來(lái)描述的。應(yīng)理解可由計(jì)算機(jī)程序指令實(shí)現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計(jì)算機(jī)程序指令到通用計(jì)算機(jī)、專用計(jì)算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個(gè)機(jī)器,使得通過(guò)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的裝置。

      這些計(jì)算機(jī)程序指令也可存儲(chǔ)在能引導(dǎo)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計(jì)算機(jī)可讀存儲(chǔ)器中,使得存儲(chǔ)在該計(jì)算機(jī)可讀存儲(chǔ)器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能。

      這些計(jì)算機(jī)程序指令也可裝載到計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的處理,從而在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行的指令提供用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的步驟。

      盡管已描述了本發(fā)明的優(yōu)選實(shí)施例,但本領(lǐng)域內(nèi)的技術(shù)人員一旦得知了基本創(chuàng)造性概念,則可對(duì)這些實(shí)施例作出另外的變更和修改。所以,所附權(quán)利要求意欲解釋為包括優(yōu)選實(shí)施例以及落入本發(fā)明范圍的所有變更和修改。

      顯然,本領(lǐng)域的技術(shù)人員可以對(duì)本發(fā)明進(jìn)行各種改動(dòng)和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動(dòng)和變型在內(nèi)。

      當(dāng)前第1頁(yè)1 2 3 
      網(wǎng)友詢問(wèn)留言 已有0條留言
      • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1