LRU (Least Recently Used)
LRU ์๊ณ ๋ฆฌ์ฆ์ ์ด์์ฒด์ ์ ํ์ด์ง ๊ต์ฒด ์๊ณ ๋ฆฌ์ฆ ์ค ํ๋์ด๋ค. Cache ์๊ณ ๋ฆฌ์ฆ ์ค ๊ฐ์ฅ ์ ๋ช
ํ ์๊ณ ๋ฆฌ์ฆ ์ด๊ธฐ๋ ํ๋ค.
LRU ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์ฅ ์ค๋ซ๋์ ์ฐธ์กฐ๋์ง ์์ ํญ๋ชฉ์ ๊ต์ฒด
ํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
LinkedHashMap ์ผ๋ก ๊ตฌํํ๊ธฐ
LinkedHashMap ์ ๋ค์ ์์ฑ์๋ฅผ ํ์ฉํ์๋ค.
accessOrder ์์ฑ
public LinkedHashMap(int initialCapacity,
float loadFactor,
boolean accessOrder) {
super(initialCapacity, loadFactor);
this.accessOrder = accessOrder;
}
accessOrder
๊ฐ์ true ๋ก ์์ฑํ๋ฉด ๋ด๋ถ์ ์ผ๋ก key์ ์ ๊ทผํ ๋ ๋ง๋ค afterNodeAccess()
๋ฉ์๋๋ฅผ ์คํํ๋ค.afterNodeAccess()
๋ฉ์๋๋ ์ต๊ทผ์ ์ ๊ทผํ ๋
ธ๋๋ฅผ ๊ฐ์ฅ ๋ง์ง๋ง ๋
ธ๋๋ก ์์น์ํจ๋ค.
removeEldestEntry() ๋ฉ์๋
๊ฐ์ฅ ์ค๋๋ ๊ฐ์ ๋์ฒด
ํ ๋ ์ฌ์ฉํ๋ค.
๊ธฐ๋ณธ ๊ฐ์ false
์ง๋ง LRU
๋ฅผ ๊ตฌํํ ๋ ์ง์ ๋ ์ฌ์ด์ฆ๋ฅผ ๋์ด๊ฐ๋ฉด ์ค๋๋ ๊ฐ ๋ถํฐ ์ง์์ง๋๋ก ํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ด ์ค๋ฒ๋ผ์ด๋ฉ ํ๋ค.
@Override
protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
return size() > size;
}
LRU Test
๋ค์์ size๋ฅผ 10์ผ๋ก ์ง์ ํ๊ณ 1๋ถํฐ 10๊น์ง ์์๋๋ก key์ value๋ฅผ ์ด๊ธฐํ ์ํจ ๋ค ๋ค์์ ์์ ์ ํ ๊ฒฐ๊ณผ๋ค.
- 3์ get()์ผ๋ก ์ ๊ทผ
- 5, 2๋ put()์ผ๋ก ๊ฐ ์ ๋ฐ์ดํธ
- 11์ put()์ผ๋ก ๊ฐ ์ ๋ ฅ
====[LRU test]====
key-4=value-4
key-6=value-6
key-7=value-7
key-8=value-8
key-9=value-9
key-10=value-10
key-3=value-3
key-5=value-5-update
key-11=value-11-insert
key-2=value-2-update
๊ฐ์ฅ ์ต๊ทผ์ ์ ๊ทผํ 2,3,5,11 key๊ฐ ๋ค ์์๋ก ์ ๋ ฌ๋๊ณ size๊ฐ 10์ด๊ธฐ ๋๋ฌธ์ ๋งจ ์์ key๋ก ์์์ key-1
์ด ๋จผ์ ์ญ์ ๋ ๊ฒ์ ์ ์ ์๋ค.