一種內存釋放方法及裝置與流程
2023-06-05 00:27:31

技術領域
本發明涉及移動終端開發技術,尤其涉及一種內存釋放方法及裝置。
背景技術:
移動終端的內存通常指移動終端的物理內存,當存在應用進程時,移動終端會分配一部分物理內存給該應用進程,則這部分物理內存成為進程可使用內存,通常分配在託管堆上,由移動終端通過垃圾回收(Garbage Collection,GC)來管理,當移動終端的物理內存不足時,移動終端會根據垃圾回收(Garbage Collection,GC)策略清除一些沒有被引用到的對象,釋放空間,以解決內存不足(out of memory,OOM)的問題。然而在進行與緩存文件相關的操作時,經常會出現OOM的問題,且很難通過GC策略解決。以位圖(Bitmap)文件為例,當需要在一個界面上顯示數十張圖片乃至上百張圖片時,即使使用類似於列表或者網絡的控制項來實現,限定一次顯示的圖片數量的上限,並在當圖片較多時採用縮略圖策略,當多次在一個界面上顯示數目較多的圖片,也會使大量內存一直被引用,移動終端無法通過GC策略完成回收,也很容易出現內存不足的問題。
目前,對於進行文件相關操作時出現的內存不足的問題,存在三種解決方案。
第一種解決方案,將文件存儲為軟引用(SoftReference)對象。軟引用是一種需要通過SoftReference類來實現的引用方式,若一個對象為軟引用對象,當移動終端出現OOM時,移動終端根據GC策略一定會回收該對象。
這種方法的弊端在於,在一個界面上顯示大量文件時,由於文件設置為軟引用對象,當移動終端內存不足時,會被回收,導致在一個界面上的大量文件需要被重複解析,系統處理效率低,影響用戶體驗。
第二種解決方案,在內存中加載文件時對文件進行邊界壓縮。
這種方法的弊端在於,當需要在同一界面上顯示大量的文件時,依然無法解決OOM問題。
第三種解決方案,若顯示文件時需要大量的內存,則將存儲文件的託管堆的大小調大。
這種方法的弊端在於,在內存一定的情況下,將存儲文件的託管堆的大小調大,勢必會影響其他模塊的正常使用。
這三種解決方案,均不能在避免影響移動終端的正常使用的情況下有效的解決OOM問題。
技術實現要素:
本發明實施例提供一種內存釋放方法及裝置,以實現在避免影響移動終端的正常使用的情況下有效的解決OOM問題。
一種內存釋放方法,包括:
對文件逐一進行解碼,並將解碼成功的文件逐一存儲在第一緩存區中;
當確定所述第一緩存區中剩餘存儲空間不足時,將所述第一緩存區中存儲時間最長的解碼成功的文件轉存到第二緩存區;
當確定存在內存不足OOM時,將第二緩存區中存儲的解碼成功的文件刪除。
一種內存釋放裝置,包括:
存儲單元,用於對文件逐一進行解碼,並將解碼成功的文件逐一存儲在第一緩存區中;
轉存單元,用於當確定所述第一緩存區中剩餘存儲空間不足時,將所述第一緩存區中存儲時間最長的解碼成功的文件轉存到第二緩存區;
刪除單元,用於當確定存在內存不足OOM時,將第二緩存區中存儲的解碼成功的文件刪除。
本發明實施例提供一種內存釋放方法及裝置,對文件進行解碼後,先將解碼成功的文件存儲在第一緩存區中,在第一緩存區中剩餘存儲空間不足時,當需要存儲新的解碼成功的文件時,將第一緩存區中存儲時間最長的解碼成功的文件轉存到第二緩存區中,當確定存在OOM時,將第二緩存區中的解碼成功的文件刪除,因為第二緩存區中存儲的文件為存儲時間較長的文件,調用的概率較小,因此在存在OOM時刪除第二緩存區中存儲的文件不會影響移動終端的正常使用,且能夠有效的解決OOM問題,從而實現了在避免影響移動終端的正常使用的情況下有效的解決OOM問題。
附圖說明
圖1為本發明實施例提供的一種內存釋放方法流程圖之一;
圖2為本發明實施例提供的一種鍊表哈希映射結構示意圖;
圖3為本發明實施例提供的一種內存釋放方法流程圖之二;
圖4為本發明實施例提供的一種較佳的內存釋放的方法流程圖;
圖5為本發明實施例提供的一種內存釋放裝置結構示意圖之一;
圖6為本發明實施例提供的一種內存釋放裝置結構示意圖之二。
具體實施方式
本發明實施例提供一種內存釋放方法及裝置,對文件進行解碼後,先將解碼成功的文件存儲在第一緩存區中,在第一緩存區中剩餘存儲空間不足時,當需要存儲新的解碼成功的文件時,將第一緩存區中存儲時間最長的解碼成功的文件轉存到第二緩存區中,當確定存在OOM時,將第二緩存區中的解碼成功的文件刪除,因為第二緩存區中存儲的文件為存儲時間較長的文件,調用的概率較小,因此在存在OOM時刪除第二緩存區中存儲的文件不會影響移動終端的正常使用,且能夠有效的解決OOM問題,從而實現了在避免影響移動終端的正常使用的情況下有效的解決OOM問題。
如圖1所示,本發明實施例提供一種內存釋放方法,包括:
S101、對文件逐一進行解碼,並將解碼成功的文件逐一存儲在第一緩存區中;
S102、當確定第一緩存區中剩餘存儲空間不足時,將第一緩存區中存儲時間最長的解碼成功的文件轉存到第二緩存區;
S103、當確定存在OOM時,將第二緩存區中存儲的解碼成功的文件刪除。
本發明實施例設置了兩個文件緩存區,對文件進行解碼後,將解碼成功的文件存儲在第一緩存區內,當確定第一緩存區中剩餘的存儲空間不足時,則將第一緩存區中存儲時間最長的解碼成功的文件轉存到第二緩存區中。當存在OOM問題時,將第二緩存區中存儲的解碼成功的文件刪除,由於刪除的是存儲時間較長,即調用概率較小的文件,因此不會影響移動終端的正常使用,同時,也有效的解決了OOM問題。
其中被解碼的文件可以為位圖文件。
較佳的,為了方便實現S102,可以將第一緩存區設置為鍊表哈希映射(LinkedHashMap)式緩存區,如圖2所示,LinkedHashMap具有先進先出的特點,將第一緩存區設置為LinkedHashMap式緩存區,並預先設定第一緩存區能夠存儲的文件的最多個數,則在第一緩存區中存儲的解碼成功的文件的個數達到設定個數後,若需要繼續在第一緩存區中存儲解碼成功的文件,第一緩存區中存儲時間最久的文件由於是最先進入第一緩存區的,此時就會從第一緩存區中移出,被轉存到第二緩存區中。
本領域的技術人員也可以將第二緩存區設置為並髮式哈希映射(ConcurrentHashMap)式緩存區,ConcurrentHashMap可以同時接受多個進程的訪問,能夠有效的加快移動終端的處理速度。
其中,第一緩存區及第二緩存區的大小可以由本領域技術人員根據經驗及移動終端總內存的大小自行設定,例如,當移動終端的總內存大小為1G時,可以將第一緩存區的內存大小設置為能夠存儲12-20個解碼成功的文件,將第二緩存區的內存大小設置為能夠存儲6-10個解碼成功的文件,較佳的,可以將第一緩存區的內存大小設置為能夠存儲16個解碼成功的文件,將第二緩存區的內存大小設置為能夠存儲8個解碼成功的文件,當移動終端的總內存大小為2G時,可以將第一緩存區的內存大小設置為能夠存儲24-40個解碼成功的文件,將第二緩存區的內存大小設置為能夠存儲12-20個解碼成功的文件,較佳的,可以將第一緩存區的內存大小設置為能夠存儲32個解碼成功的文件,將第二緩存區的內存大小設置為能夠存儲16個解碼成功的文件。
當然,本領域的技術人員可以採用其他可行方式設置第一緩存區及第二緩存區,此處不再一一敘述。
具體的,S102中確定第一緩存區中剩餘存儲空間不足,具體包括:
確定需要存儲的新的解碼成功的文件大小大於所述第一緩存區中的未使用的內存大小時;或者
確定所述第一緩存區中存儲的解碼成功的文件個數已達到設定個數。
實際應用中,當需要存儲新的解碼成功的文件時,可以首先判斷第一緩存區中未使用內存大小是否大於需要存儲的新的解碼成功的文件的大小,若需要存儲的新的解碼成功的文件的大小大於第一緩存區中未使用內存的大小,例如需要存儲的新的解碼成功的文件的大小為30M,而第一緩存區中的剩餘存儲空間為20M,則確定第一緩存去中剩餘存儲空間不足,需要將第一緩存區中存儲時間最長的解碼成功的文件轉存到第二緩存區中去。或者,預先設定第一緩存區能夠存儲的解碼成功的文件的最大個數,當需要存儲新的解碼成功的文件時,可以首先判斷第一緩存區中存儲的解碼成功的文件的個數是否達到第一緩存區中能夠存儲的解碼成功的文件的最大個數,若第一緩存區中存儲的解碼成功的文件個數達到第一緩存區能夠存儲的解碼成功的文件的最大個數,例如設定的第一緩存區能夠存儲的解碼成功的文件的個數為16個,則在需要存儲新的解碼成功的文件時,若確定了第一緩存區中已存儲了16個解碼成功的文件,則需要先將第一緩存區中存儲時間最久的解碼成功的文件轉存到第二緩存區中,再將新的解碼成功的文件存儲到第一緩存區中去。
具體的,S103中確定存在OOM,包括:
確定所述第二緩存區中未使用的內存大小小於當前需要轉存到所述第二緩存區的解碼成功的文件大小。
實際應用中,若需要轉存到第二緩存區中的解碼成功的文件的大小大於第二緩存區中未使用的內存大小,則可以確定出現了OOM,此時,可以先將第二緩存區中緩存的解碼成功的文件刪除,再將需要轉存到第二緩存區中的解碼成功的文件存儲到第二緩存區中去。
進一步,由於軟引用是一種需要通過SoftReference類來實現的引用方式,若一個對象為軟引用對象,當移動終端出現OOM時,移動終端通常會刪除該對象。因此可以將第二存儲區中存儲的文件存儲為軟引用對象,並設定當出現OOM時,移動終端將軟引用對象刪除,從而解決OOM的問題。具體的,S102中將第一緩存區中存儲時間最長的解碼成功的文件轉存到第二緩存區,具體為:
將第一緩存區中存儲時間最長的解碼成功的文件轉存到第二緩存區,並存儲成軟引用對象;
則S103具體為:
當確定存在OOM時,將軟引用對象刪除。
當然,本領域的技術人員可以採用其他可行方式在第二存儲區中存儲解碼成功的文件;當然,本領域的技術人員也可以通過其他可行方式實現S103,此處僅提供一種較佳的實現方式,不再一一敘述。
解碼成功的文件被存儲到第一緩存區或第二緩存區後,當需要獲取文件時,可以先在第一緩存區中查找需要獲取的文件,若確定第一緩存區中不存在需要獲取的文件,則在第二緩存區中進行查找,當確定第二緩存區中不存在需要獲取的文件時,可以對需要獲取的文件進行解碼,具體的,如圖3所示,本發明實施例提供的內存釋放方法還包括:
S301、確定需要獲取解碼成功的文件時,在第一緩存區中查找需獲取的解碼成功的文件;
S302、確定第一緩存區中不存在需要獲取的解碼成功的文件時,在第二緩存區中查找需獲取的解碼成功的文件;
S303、確定第二緩存區中不存在需要獲取的解碼成功的文件時,對需要獲取的解碼成功的文件所對應的原文件進行解碼。
本發明實施例提供一種較佳的內存釋放方法,如圖4所示,該方法包括:
S401、對文件進行解碼,並將解碼成功的文件存儲在LinkedHashMap緩存區中;
S402、在LinkedHashMap緩存區中存儲的解碼成功的文件的個數達到設定個數後,當需要存儲新的解碼成功的文件時,將LinkedHashMap緩存區中存儲時間最長的解碼成功的文件轉存到ConcurrentHashMap緩存區;
S403、當確定存在OOM時,將ConcurrentHashMap緩存區中存儲的解碼成功的文件刪除。
S404、確定需要獲取文件時,在LinkedHashMap緩存區中查找需獲取的解碼成功的文件;
S405、確定LinkedHashMap緩存區中不存在需要獲取的解碼成功的文件時,在ConcurrentHashMap緩存區中查找需獲取的解碼成功的文件;
S406、確定ConcurrentHashMap緩存區中不存在需要獲取的解碼成功的文件時,對需要獲取的解碼成功的文件的所對應的原文件進行解碼。
如圖5所示,本發明實施例提供一種內存釋放裝置,包括:
存儲單元501,用於對文件逐一進行解碼,並將解碼成功的文件逐一存儲在第一緩存區中;
轉存單元502,用於當確定第一緩存區中剩餘存儲空間不足時,將第一緩存區中存儲時間最長的解碼成功的文件轉存到第二緩存區;
刪除單元503,用於當確定存在OOM時,將第二緩存區中存儲的解碼成功的文件刪除。
本發明實施例設置了兩個文件緩存區,對文件進行解碼後,將解碼成功的文件存儲在第一緩存區內,當確定第一緩存區中剩餘的存儲空間不足時,則將第一緩存區中存儲時間最長的解碼成功的文件轉存到第二緩存區中。當存在OOM問題時,將第二緩存區中存儲的解碼成功的文件刪除,由於刪除的是存儲時間較長,即調用頻率較低的文件,因此不會影響移動終端的正常使用,同時,也有效的解決了OOM問題。
較佳的,為了更方便實現在第一緩存區中存儲的解碼成功的文件的個數達到設定個數後,當需要存儲新的解碼成功的文件時,將第一緩存區中存儲時間最長的解碼成功的文件轉存到第二緩存區,可以將第一緩存區設置為鍊表哈希映射(LinkedHashMap)式緩存區,LinkedHashMap具有先進先出的特點,將第一緩存區設置為LinkedHashMap式緩存區,並預先設定第一緩存區能夠存儲的文件的最多個數,則在第一緩存區中存儲的解碼成功的文件的個數達到設定個數後,若需要繼續在第一緩存區中存儲解碼成功的文件,第一緩存區中存儲時間最久的文件由於是最先進入第一緩存區的,此時就會從第一緩存區中移出,被轉存到第二緩存區中。
本領域的技術人員也可以將第二緩存區設置為並髮式哈希映射(ConcurrentHashMap)式緩存區,ConcurrentHashMap可以同時接受多個進程的訪問,能夠有效的加快移動終端的處理速度。
當然,本領域的技術人員可以採用其他可行方式設置第一緩存區及第二緩存區,此處不再一一敘述。
其中,第一緩存區及第二緩存區的大小可以由本領域技術人員根據經驗及移動終端總內存的大小自行設定,例如,當移動終端的總內存大小為1G時,可以將第一緩存區的內存大小設置為能夠存儲12-20個解碼成功的文件,將第二緩存區的內存大小設置為能夠存儲6-10個解碼成功的文件,較佳的,可以將第一緩存區的內存大小設置為能夠存儲16個解碼成功的文件,將第二緩存區的內存大小設置為能夠存儲8個解碼成功的文件,當移動終端的總內存大小為2G時,可以將第一緩存區的內存大小設置為能夠存儲24-40個解碼成功的文件,將第二緩存區的內存大小設置為能夠存儲12-20個解碼成功的文件,較佳的,可以將第一緩存區的內存大小設置為能夠存儲32個解碼成功的文件,將第二緩存區的內存大小設置為能夠存儲16個解碼成功的文件。
具體的,轉存單元502確定第一緩存區中剩餘存儲空間不足,具體用於:
確定需要存儲的新的解碼成功的文件大小大於第一緩存區中的未使用的內存大小;或者
確定第一緩存區中存儲的解碼成功的文件個數已達到設定個數時。
實際應用中,當需要存儲新的解碼成功的文件時,可以首先判斷第一緩存區中未使用內存大小是否大於需要存儲的新的解碼成功的文件的大小,若需要存儲的新的解碼成功的文件的大小大於第一緩存區中未使用內存的大小,例如需要存儲的新的解碼成功的文件的大小為30M,而第一緩存區中的剩餘存儲空間為20M,則確定第一緩存去中剩餘存儲空間不足,需要將第一緩存區中存儲時間最長的解碼成功的文件轉存到第二緩存區中去。或者,預先設定第一緩存區能夠存儲的解碼成功的文件的最大個數,當需要存儲新的解碼成功的文件時,可以首先判斷第一緩存區中存儲的解碼成功的文件的個數是否達到第一緩存區中能夠存儲的解碼成功的文件的最大個數,若第一緩存區中存儲的解碼成功的文件個數達到第一緩存區能夠存儲的解碼成功的文件的最大個數,例如設定的第一緩存區能夠存儲的解碼成功的文件的個數為16個,則在需要存儲新的解碼成功的文件時,若確定了第一緩存區中已存儲了16個解碼成功的文件,則需要先將第一緩存區中存儲時間最久的解碼成功的文件轉存到第二緩存區中,再將新的解碼成功的文件存儲到第一緩存區中去。
具體的,刪除單元503確定存在OOM,用於:
確定第二緩存區中未使用的內存大小小於當前需要轉存到所述第二緩存區的解碼成功的文件大小。
實際應用中,若需要轉存到第二緩存區中的解碼成功的文件的大小大於第二緩存區中未使用的內存大小,則可以確定出現了OOM,此時,可以先將第二緩存區中緩存的解碼成功的文件刪除,再將需要轉存到第二緩存區中的解碼成功的文件存儲到第二緩存區中去。
進一步,由於軟引用是一種需要通過SoftReference類來實現的引用方式,若一個對象為軟引用對象,當移動終端出現OOM時,移動終端通常會刪除該對象。因此可以將第二存儲區中存儲的文件存儲為軟引用對象,並設定當出現OOM時,移動終端將軟引用對象刪除,從而解決OOM的問題。具體的,轉存單元502將第一緩存區中存儲時間最長的解碼成功的文件轉存到第二緩存區,具體用於:
將第一緩存區中存儲時間最長的解碼成功的文件轉存到第二緩存區,並存儲成軟引用對象;
則刪除單元503具體用於:
當確定存在OOM時,將軟引用對象刪除。
當然,本領域的技術人員可以採用其他可行方式在第二存儲區中存儲解碼成功的文件;當然,本領域的技術人員也可以通過其他可行方式實現刪除單元503,此處僅提供一種較佳的實現方式,不再一一敘述。
解碼成功的文件被存儲到第一緩存區或第二緩存區後,當需要獲取文件時,可以先在第一緩存區中查找需要獲取的文件,若確定第一緩存區中不存在需要獲取的文件,則在第二緩存區中進行查找,當確定第二緩存區中不存在需要獲取的文件時,再對需要獲取的文件進行解碼,具體的,如圖6所示,本發明實施例提供的內存釋放裝置還包括:
第一查找單元504,用於確定需要獲取解碼成功的文件時,在第一緩存區中查找需獲取的解碼成功的文件;
第二查找單元505,用於確定第一緩存區中不存在需要獲取的解碼成功的文件時,在第二緩存區中查找需獲取的解碼成功的文件;
解碼單元506,用於確定第二緩存區中不存在需要獲取的解碼成功的文件時,對需要獲取的解碼成功的文件所對應的原文件進行解碼。
本發明實施例提供一種內存釋放方法及裝置,對文件進行解碼後,先將解碼成功的文件存儲在第一緩存區中,在第一緩存區中剩餘存儲空間不足時,當需要存儲新的解碼成功的文件時,將第一緩存區中存儲時間最長的解碼成功的文件轉存到第二緩存區中,當確定存在OOM時,將第二緩存區中的解碼成功的文件刪除,因為第二緩存區中存儲的文件為存儲時間較長的文件,調用的概率較小,因此在存在OOM時刪除第二緩存區中存儲的文件不會影響移動終端的正常使用,且能夠有效的解決OOM問題,從而實現了在避免影響移動終端的正常使用的情況下有效的解決OOM問題。
本領域內的技術人員應明白,本發明的實施例可提供為方法、系統、或電腦程式產品。因此,本發明可採用完全硬體實施例、完全軟體實施例、或結合軟體和硬體方面的實施例的形式。而且,本發明可採用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(包括但不限於磁碟存儲器、CD-ROM、光學存儲器等)上實施的電腦程式產品的形式。
本發明是參照根據本發明實施例的方法、設備(系統)、和電腦程式產品的流程圖和/或方框圖來描述的。應理解可由電腦程式指令實現流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結合。可提供這些電腦程式指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數據處理設備的處理器以產生一個機器,使得通過計算機或其他可編程數據處理設備的處理器執行的指令產生用於實現在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。
這些電腦程式指令也可存儲在能引導計算機或其他可編程數據處理設備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產生包括指令裝置的製造品,該指令裝置實現在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。
這些電腦程式指令也可裝載到計算機或其他可編程數據處理設備上,使得在計算機或其他可編程設備上執行一系列操作步驟以產生計算機實現的處理,從而在計算機或其他可編程設備上執行的指令提供用於實現在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。
儘管已描述了本發明的優選實施例,但本領域內的技術人員一旦得知了基本創造性概念,則可對這些實施例作出另外的變更和修改。所以,所附權利要求意欲解釋為包括優選實施例以及落入本發明範圍的所有變更和修改。
顯然,本領域的技術人員可以對本發明進行各種改動和變型而不脫離本發明的精神和範圍。這樣,倘若本發明的這些修改和變型屬於本發明權利要求及其等同技術的範圍之內,則本發明也意圖包含這些改動和變型在內。