자바 캐 시 원리 와 인 스 턴 스
2307 단어 자바
원 리 는 매우 간단 하 다.데이터 가 필요 할 때마다 먼저 Map 에 가서 있 는 지 없 는 지 를 보고 있 으 면 꺼 내 고 없 으 면 데이터 베 이 스 를 찾 거나 인 스 턴 스 를 만들어 시스템 의 추가 비용 을 피한다.
의사 코드
아래 의 이 코드 는 다른 사람의 것 을 참고 하 는 것 이 고 기본 원리 와 과정 은 바로 이렇다.
다음 코드 의 해석 은?
안전 한 Concurrent HashMap 을 만 듭 니 다.get 방법 은 데 이 터 를 가 지 러 갈 때마다 가 져 오 면 바로 돌아 갑 니 다.만약 에 제 가 대상 을 잠 그 지 못 하면(여 기 는 읽 기와 쓰기 자 물 쇠 를 사용 하지 않 습 니 다.읽 기와 쓰기 자물쇠 가 잠 겨 있 으 면 모든 스 레 드 를 읽 을 수 있 고 읽 지 못 하면 원본 데이터 에서 가 져 옵 니 다.실제로 읽 기와 쓰기 자물쇠 가 잘 맞 으 면 실현 할 수 있 습 니 다.다만 비교적 번거롭다).그리고 데이터 원본 에서 가 져 옵 니 다.여기 의 데이터 원본 은 약 한 키 로 이 루어 진 Hash 표 입 니 다.weak 유지 보수 의 해시 표 는 정상 적 이지 않 을 때 표 의 대상 을 자동 으로 제거 하기 때문에 일부 자원 을 절약 할 수 있 습 니 다.put 는 말 하지 않 겠 습 니 다.너무 간단 합 니 다.
package test;
import java.util.Map;
import java.util.WeakHashMap;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public final class SimpleCache<K,V> {
private final Lock lock = new ReentrantLock();
private final int maxCapacity;
private final Map<K,V> eden;
private final Map<K,V> longterm;
public SimpleCache(int maxCapacity) {
this.maxCapacity = maxCapacity;
this.eden = new ConcurrentHashMap<K,V>(maxCapacity);
this.longterm = new WeakHashMap<K,V>(maxCapacity);
}
public V get(K k) {
V v = this.eden.get(k);
if (v == null) {
lock.lock();
try{
v = this.longterm.get(k);
}finally{
lock.unlock();
}
if (v != null) {
this.eden.put(k, v);
}
}
return v;
}
public void put(K k, V v) {
if (this.eden.size() >= maxCapacity) {
lock.lock();
try{
this.longterm.putAll(this.eden);
}finally{
lock.unlock();
}
this.eden.clear();
}
this.eden.put(k, v);
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.