1.LRU是Least Recently Used的縮寫拜姿,即最近最少使用頁面置換算法烙样,是為虛擬頁式存儲管理服務(wù)的,是根據(jù)頁面調(diào)入內(nèi)存后的使用情況進(jìn)行決策了蕊肥。由于無法預(yù)測各頁面將來的使用情況谒获,只能利用“最近的過去”作為“最近的將來”的近似,因此壁却,LRU算法就是將最近最久未使用的頁面予以淘汰批狱。
2.操作系統(tǒng)課程里有學(xué)過,在內(nèi)存不夠的場景下展东,淘汰舊內(nèi)容的策略精耐。LRU … Least Recent Used,淘汰掉最不經(jīng)常使用的琅锻∝酝#可以稍微多補(bǔ)充兩句向胡,因為計算機(jī)體系結(jié)構(gòu)中,最大的最可靠的存儲是硬盤惊完,它容量很大僵芹,并且內(nèi)容可以固化,但是訪問速度很慢小槐,所以需要把使用的內(nèi)容載入內(nèi)存中拇派;內(nèi)存速度很快,但是容量有限凿跳,并且斷電后內(nèi)容會丟失件豌,并且為了進(jìn)一步提升性能,還有CPU內(nèi)部的 L1 Cache控嗜,L2 Cache等概念茧彤。因為速度越快的地方,它的單位成本越高疆栏,容量越小曾掂,新的內(nèi)容不斷被載入,舊的內(nèi)容肯定要被淘汰壁顶,所以就有這樣的使用背景珠洗。
3.JS實現(xiàn)LRU緩存函數(shù)
class LRUCache {
constructor(size){
this.size = size;
this.cache = new Map();
}
get(key){
const hasKey = this.cache.has(key);
if(hasKey){
const val = this.cache.get(key);
this.cache.delete(key);
this.cache.set(key, val);
return val;
}else{
return -1;
}
}
set(key, value){
const hasKey = this.cache.has(key);
if(hasKey){
this.cache.delete(key);
}
this.cache.set(key, value);
if(this.cache.size > this.size){
// this.cache.keys().next().value用于獲取最前面(即使用次數(shù)最少的key),然后刪除
this.cache.delete(this.cache.keys().next().value);
}
}
}