HBase LruBlockCache源码分析
本章对LruBlockCache源码进行简单部分和讲解,其中包括如下部分:
- 构造函数
- getBlock
- cacheBlock
- evict
构造函数说明
LruBlockCache 构造函数
从构造函数可以看出,整体有一下几个部分组成
- LruBlockCache 内存比例
- 统计参数
this.stats = new CacheStats(this.getClass().getSimpleName());
// 一下配合stats进行必要统计
this.count = new AtomicLong(0);
this.elements = new AtomicLong(0);
this.dataBlockElements = new AtomicLong(0);
this.dataBlockSize = new AtomicLong(0);
this.size = new AtomicLong(this.overhead);
存储容器
new ConcurrentHashMap<BlockCacheKey, LruCachedBlock>(mapInitialSize,
mapLoadFactor, mapConcurrencyLevel);
LruBlockCache EvictionThread (clean/10s | clean/notify)
if(evictionThread) {
this.evictionThread = new EvictionThread(this);
this.evictionThread.start();
} else {
this.evictionThread = null;
}
@Override
public void run() {
enteringRun = true;
while (this.go) {
synchronized(this) {
try {
this.wait(1000 * 10/*Don't wait for ever*/);
} catch(InterruptedException e) {
LOG.warn("Interrupted eviction thread ", e);
Thread.currentThread().interrupt();
}
}
LruBlockCache cache = this.cache.get();
if (cache == null) break;
cache.evict