LRU 알고리즘(Least Recently Used) 캐시에서 가장 오래 전에 참조된 페이지를 교체하는 방식으로 작동. 이를 구현하기 위해 다음 두 가지 주요 작업을 수행:
LinkedHashMap 생성자:
import java.util.LinkedHashMap;
import java.util.Map;
public class LRUCache {
private final int capacity;
private final LinkedHashMap<Integer, Integer> cache;
public LRUCache(int capacity) {
this.capacity = capacity;
this.cache = new LinkedHashMap<>(capacity, 0.75f, true) {
protected boolean removeEldestEntry(Map.Entry<Integer, Integer> eldest) {
return size() > LRUCache.this.capacity;
}
};
}
public void refer(int key) {
if (!cache.containsKey(key)) {
System.out.println("해당 페이지를 캐시에 추가: " + key);
} else {
System.out.println("해당 페이지를 캐시에서 접근: " + key);
}
cache.put(key, key);
}
public void display() {
System.out.println(cache.keySet());
}
public static void main(String[] args) {
LRUCache cache = new LRUCache(3);
int[] testPages = {1, 3, 0, 3, 5, 6, 3};
for (int page : testPages) {
cache.refer(page);
cache.display();
}
}
}
이 예시에서, 캐시는 최대 3개의 페이지를 저장. 페이지가 캐시에 추가되거나 접근될 때마다, LinkedHashMap은 페이지의 순서를 최신화. 캐시가 가득 차면, 가장 오래 전에 참조된 페이지 (캐시의 첫 번째 요소)가 자동으로 제거.