LRU 알고리즘이란 가장 오랫동안 참조되지 않은 페이지를 교체하는 기법이다.
캐시 교체 알고리즘에 많이 사용된다.
캐시란 자주 사용하는 데이터를 미리 복사 담아두는 임시 장소를 의미한다.
예를들어 캐시는 메모리와 레지스터 사이에 존재하는 하나의 메모리로 사용된다.
메모리의 용량이 커질 수록 CPU에서 메모리를 탐색하는 시간 또한 길어진다.
때문에 CPU 처리 속도와 메모리 탐색 시간 사이의 격차가 발생하게 된다.
따라서 이 격차를 해소하기 위해 캐시 메모리를 사용할 수 있다.
즉, 자주 사용하는 특정 값을 캐시에 올려 CPU가 더욱 빨리 접근할 수 있도록 도와준다!
CPU가 메모리에 접근하기 전에 먼저 캐시 메모리에서 원하는 데이터가 있는지 확인한다.
이 때 데이터를 캐시에서 찾을 확률을 적중률(hit ratio)라고 한다.
캐시 메모리의 성능을 이 적중률에 의해 결정된다.
캐시 교체 알고리즘의 예로 3가지를 살펴본다.
Map 객체를 이용하여 간단하게 구현할 수 있다.
constructor(cacheSize) {
this.cacheSize = cacheSize;
this.cache = new Map();
}
set(key, data) {
if (this.cache.size === this.cacheSize) {
this.cache.delete(this.cache.keys().next().value)
}
this.cache.set(keyword, sliced_data);
}
get(key) {
let data;
if (this.cache.has(key)) {
data = this.cache.get(key);
data.hitCount++;
this.cache.delete(key);
this.cache.set(key, data);
} else {
data = null;
}
return data;
}
일반적인 HashMap이라면 순서를 보장하지 않을 수 있다.
순서를 보장하지 않는다면 위의 방식은 적합하지 않다.