java三級緩存設計
『壹』 三級緩存的使用
關於圖片的處理,必不可少要用到三級緩存技術。
什麼是三級緩存?
三級緩存一般分為內存--本地--網路三級緩存
內存(手機內存):內存相對於磁碟緩存,速度會快很多,但是缺點就是容量較小,不能存儲大容量數據,且容易被系統回收。LruCache
磁碟(SD卡):相對於內存來說存儲空間很大,能夠存儲較多的數據。DiskLruCache(DiskLruCache是非Google官方編寫,但獲得官方認證的硬碟緩存類,該類沒有限定在Android內,所以理論上 java 應用也可以使用DiskLreCache來緩存。)
網路:伺服器端,通過HTTP請求獲得。
具體流程就是,同一張圖片從網路獲取一次,然後在本地緩存下來,之後載入同一張圖片的時候就從緩存中去載入。
先在內存中查找,找到就進行載入,否則去磁碟查找,找到將圖片添加到內存中,載入顯示,否則從網路載入,並且緩存到內存和磁碟,並返回。這就是完整的三級緩存過程。
這里需要介紹的是內存緩存一共分為四類:強引用、軟引用、弱引用和虛引用(後面我會再專門整理一篇博客的~)
到這里三級緩存應該大概明白了吧,下面是我寫的實現demo
Activity和布局文件都比較簡單,布局中只有一個imageView,實例化上面個工具類,調用loadBitmap方法即可,這里就不貼出來了。
第一次打開時log信息:
關閉後打開log信息:
以上是三級緩存的使用。
『貳』 為什麼CPU要分一級緩存、二級緩存和三級緩存
CPU緩存就是CPU內部的緩存運行頻率,緩存的大小與結構對CPU速度的影響較大,因此緩存大小也是CPU重要的性能指標之一。
CPU緩存的作用主要是為了解決CPU運算速度與內存讀寫速度不匹配的矛盾,而緩存的容量要比內存要小的太多,但是其速度要比內存快的多,因此這樣會讓CPU使用很長的時間等待數據到來或把數據寫入內存中。
搜索在緩存中的數據是內存中的一小部分,但這一小部分是短時間內CPU即將訪問的,當CPU調用大量數據時,就能夠避開內存直接從緩存中調用,從而加快讀取速度。
當CPU需要讀取數據並進行計算時,首先需要將CPU緩存中查到所需的數據,並在最短的時間下交付給CPU。
如果沒有查到所需的數據,CPU就會提出「要求」經過緩存從內存中讀取,再原路返回至CPU進行計算。而同時,把這個數據所在的數據也調入緩存,可以使得以後對整塊數據的讀取都從緩存中進行,不必再調用內存。
一級緩存(L1 Cache)
CPU一級緩存,就是指CPU的第一層級的高速緩存,主要當擔的工作是緩存指令和緩存數據。一級緩存的容量與結構對CPU性能影響十分大,但是由於它的結構比較復雜,又考慮到成本等因素,一般來說,CPU的一級緩存較小,通常CPU的一級緩存也就能做到256KB左右的水平。
二級緩存(L2 Cache66)
CPU二級緩存,就是指CPU的第二層級的高速緩存,而二級緩存的容量會直接影響到CPU的性能,二級緩存的容量越大越好。例如intel的第八代i7-8700處理器,共有六個核心數量,而每個核心都擁有256KB的二級緩存,屬於各核心獨享,這樣二級緩存總數就達到了1.5MB。
三級緩存(L3 Cache)
CPU三級緩存,就是指CPU的第三層級的高速緩存,其作用是進一步降低內存的延遲,同時提升海量數據量計算時的性能。和一級緩存、二級緩存不同的是,三級緩存是核心共享的,能夠將容量做的很大。
CPU的核心數量、高頻高低都會影響性能,但如果讓CPU更聰明、更有效率的執行計算任務,那麼緩存的作用就至關重要了。
(2)java三級緩存設計擴展閱讀:
CPU主要性能參數:
1、主頻
主頻也叫時鍾頻率,單位是兆赫(MHz)或千兆赫(GHz),用來表示CPU的運算、處理數據的速度。
2、外頻
外頻是CPU的基準頻率,單位是MHz。CPU的外頻決定著整塊主板的運行速度。
3、匯流排頻率
前端匯流排(FSB)是將CPU連接到北橋晶元的匯流排。前端匯流排(FSB)頻率(即匯流排頻率)是直接影響CPU與內存直接數據交換速度。
4、倍頻系數
倍頻系數是指CPU主頻與外頻之間的相對比例關系。
5、緩存
緩存大小也是CPU的重要指標之一,而且緩存的結構和大小對CPU速度的影響非常大,CPU內緩存的運行頻率極高,一般是和處理器同頻運作,工作效率遠遠大於系統內存和硬碟。