docs: @Override
  	protected int pruneCache() {
  		int count = 0;
  		CacheObj<K, V> comin = null;
  
  		// 清理过期对象并找出访问最少的对象
  		Iterator<CacheObj<K, V>> values = cacheMap.values().iterator();
  		CacheObj<K, V> co;
  		while (values.hasNext()) {
  			co = values.next();
  			if (co.isExpired() == true) {
  				values.remove();
  				onRemove(co.key, co.obj);
  				count++;
  				continue;
  			}
  
  			//找出访问最少的对象
  			if (comin == null || co.accessCount < comin.accessCount) {
  				comin = co;
  			}
  		}
  
  		// 减少所有对象访问量，并清除减少后为0的访问对象
  		if (isFull() && comin != null) {
  			long minAccessCount = comin.accessCount;
  
  			values = cacheMap.values().iterator();
  			CacheObj<K, V> co1;
  			while (values.hasNext()) {
  				co1 = values.next();
  				co1.accessCount -= minAccessCount;
  				if (co1.accessCount <= 0) {
  					values.remove();
  					onRemove(co1.key, co1.obj);
  					count++;
  				}
  			}
  		}
  		
  		return count;
  	}