LRUCache詳解

LruCache詳解之 Android 內存優化算法

概念: LruCache 什麼是LruCache? LruCache實現原理是什麼?緩存

這兩個問題其實能夠做爲一個問題來回答,知道了什麼是 LruCache,就只然而然的知道 LruCache 的實現原理;Lru的全稱是Least Recently Used ,近期最少使用的!因此咱們能夠推斷出 LruCache 的實現原理:把近期最少使用的數據從緩存中移除,保留使用最頻繁的數據,那具體代碼要怎麼實現呢,咱們進入到源碼中看看。
複製代碼

咱們先看當作員變量有哪些:markdown

image.png

image.png

  1. 重置最大緩存值

image.png

2)put方法優化

image.png 能夠看到put()方法並無什麼難點,重要的就是在添加過緩存對象後,調用trimToSize()方法,來判斷緩存是否已滿,若是滿了就要刪除近期最少使用的算法。spa

3) 獲取緩存中的值3d

image.png

image.png

image.png

  1. LinkHashMap中的get方法

image.png

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

  1. 檢查是否越界

image.png trimToSize()方法不斷地刪除LinkedHashMap中隊頭的元素,即近期最少訪問的,直到緩存大小小於最大值。當調用LruCache的get()方法獲取集合中的緩存對象時,就表明訪問了一次該元素,將會更新隊列,保持整個隊列是按照訪問順序排序。這個更新過程就是在LinkedHashMap中的get()方法中完成的。orm

image.png

相關文章
相關標籤/搜索