當前位置:
首頁 > 最新 > LruCache原理分析

LruCache原理分析

LruCache:

LruCache是個泛型類,主要演算法原理是把最近使用的對象用強引用(即我們平常使用的對象引用方式)存儲在 LinkedHashMap 中。當緩存滿時,把最近最少使用的對象從內存中移除,並提供了get和put方法來完成緩存的獲取和添加操作。

強引用:直接對象的引用弱引用:當一個對象只有一個弱引用存在時,此對象隨時會被GC回收軟引用:當一個對象只有一個軟引用存在時,當系統內存不足時,會被GC回收LruCache使用:

這段代碼主要是確定LruCache的緩存大小,重寫SizeOf是確定圖片的大小。(單位要統一)

原理:

LruCache的核心就是維護一個緩存對象列表,其中列表對象的緩存排序為順序排序,就是一直沒訪問的對象,將放在隊尾,即將被淘汰。而最近訪問的對象將放在隊頭,最後被淘汰。而這個隊列是由LinkHashMap來維護的,它是一個數組+雙向鏈表的數據結構來實現的。其中雙向鏈表的結構可以實現訪問順序和插入順序。這樣的特性可以讓LinkHashMap可以實現順序排序。

分析LinkHashMap:看一下LinkHashMap的構造函數

其中當參數 accessOrder=true,為排序,為false時為插敘。那麼LinkHaspMap,又是如何添加,獲取還有刪除的?看下LruCache的put(添加):

看一下 trimToSize()方法:

trimToSize()方法,就是一添加就會去循環判斷緩存是否已滿,不滿則跳出循環,否則就刪除最先訪問的對象。看一下get方法:

點進去get();

由此可見LruCache中維護了一個集合LinkedHashMap,該LinkedHashMap是以訪問順序排序的。當調用put()方法時,就會在結合中添加元素,並調用trimToSize()判斷緩存是否已滿,如果滿了就用LinkedHashMap的迭代器刪除隊尾元素,即近期最少訪問的元素。當調用get()方法訪問緩存對象時,就會調用LinkedHashMap的get()方法獲得對應集合元素,同時會更新該元素到隊頭。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 全球大搜羅 的精彩文章:

達沃斯論壇上的各國領導人對區塊鏈技術給予很高的評價,同時也會加大數字貨幣的監管
用這種辦法經營家庭,會讓你的婚姻跟戀愛一樣甜蜜

TAG:全球大搜羅 |