LruCache詳解之 Android 內存優化算法
概念: LruCache 什麼是LruCache? LruCache實現原理是什麼?緩存
這兩個問題其實能夠做爲一個問題來回答,知道了什麼是 LruCache,就只然而然的知道 LruCache 的實現原理;Lru的全稱是Least Recently Used ,近期最少使用的!因此咱們能夠推斷出 LruCache 的實現原理:把近期最少使用的數據從緩存中移除,保留使用最頻繁的數據,那具體代碼要怎麼實現呢,咱們進入到源碼中看看。
複製代碼
咱們先看當作員變量有哪些:markdown
2)put方法優化
能夠看到put()方法並無什麼難點,重要的就是在添加過緩存對象後,調用trimToSize()方法,來判斷緩存是否已滿,若是滿了就要刪除近期最少使用的算法。spa
3) 獲取緩存中的值3d
因而可知LruCache中維護了一個集合LinkedHashMap,該LinkedHashMap是以訪問順序排序的。當調用put()方法時,就會在結合中添加元素,並調用trimToSize()判斷緩存是否已滿,若是滿了就用LinkedHashMap的迭代器刪除隊頭元素,即近期最少訪問的元素。當調用get()方法訪問緩存對象時,就會調用LinkedHashMap的get()方法得到對應集合元素,同時會更新該元素到隊尾。code
trimToSize()方法不斷地刪除LinkedHashMap中隊頭的元素,即近期最少訪問的,直到緩存大小小於最大值。當調用LruCache的get()方法獲取集合中的緩存對象時,就表明訪問了一次該元素,將會更新隊列,保持整個隊列是按照訪問順序排序。這個更新過程就是在LinkedHashMap中的get()方法中完成的。orm