com.google.common.cache.LocalCache类的使用及代码示例

x33g5p2x  于2022-01-24 转载在 其他  
字(10.1k)|赞(0)|评价(0)|浏览(200)

本文整理了Java中com.google.common.cache.LocalCache类的一些代码示例,展示了LocalCache类的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。LocalCache类的具体详情如下:
包路径:com.google.common.cache.LocalCache
类名称:LocalCache

LocalCache介绍

[英]The concurrent hash map implementation built by CacheBuilder.

This implementation is heavily derived from revision 1.96 of ConcurrentHashMap.java.
[中]由CacheBuilder构建的并发哈希映射实现。
此实现主要源自ConcurrentHashMap.java的修订版1.96。

代码示例

代码示例来源:origin: google/j2objc

this(new LocalCache<K, V>(builder, null));
localCache.invalidateAll(keys);
localCache.clear();

代码示例来源:origin: google/guava

@Override
public void cleanUp() {
 localCache.cleanUp();
}

代码示例来源:origin: google/guava

@Override
@SuppressWarnings("unchecked")
public boolean remove(Object o) {
 ReferenceEntry<K, V> e = (ReferenceEntry) o;
 ReferenceEntry<K, V> previous = e.getPreviousInAccessQueue();
 ReferenceEntry<K, V> next = e.getNextInAccessQueue();
 connectAccessOrder(previous, next);
 nullifyAccessOrder(e);
 return next != NullEntry.INSTANCE;
}

代码示例来源:origin: google/guava

boolean expires() {
 return expiresAfterWrite() || expiresAfterAccess();
}

代码示例来源:origin: google/guava

boolean usesAccessQueue() {
 return expiresAfterAccess() || evictsBySize();
}

代码示例来源:origin: google/guava

boolean recordsWrite() {
 return expiresAfterWrite() || refreshes();
}

代码示例来源:origin: at.bestsolution.efxclipse.eclipse/com.google.guava

@Nullable
public V getIfPresent(Object key) {
 int hash = hash(checkNotNull(key));
 V value = segmentFor(hash).get(key, hash);
 if (value == null) {
  globalStatsCounter.recordMisses(1);
 } else {
  globalStatsCounter.recordHits(1);
 }
 return value;
}

代码示例来源:origin: google/guava

map.put(key, value);
ReferenceEntry<Object, Object> entry = map.getEntry(key);
assertTrue(map.isLive(entry, ticker.read()));
segment.writeQueue.add(entry);
assertSame(value, map.get(key));
assertSame(entry, segment.writeQueue.peek());
assertEquals(1, segment.writeQueue.size());
segment.recordRead(entry, ticker.read());
segment.expireEntries(ticker.read());
assertSame(value, map.get(key));
assertSame(entry, segment.writeQueue.peek());
assertEquals(1, segment.writeQueue.size());
segment.recordRead(entry, ticker.read());
segment.expireEntries(ticker.read());
assertSame(value, map.get(key));
assertSame(entry, segment.writeQueue.peek());
assertEquals(1, segment.writeQueue.size());
assertNull(map.get(key));
segment.expireEntries(ticker.read());
assertNull(map.get(key));
assertTrue(segment.writeQueue.isEmpty());

代码示例来源:origin: google/guava

makeLocalCache(
    createCacheBuilder()
      .concurrencyLevel(1)
      .initialCapacity(1)
      .maximumSize(SMALL_MAX_SIZE)
      .expireAfterWrite(99999, SECONDS));
Segment<Object, Object> segment = map.segments[0];
AtomicReferenceArray<ReferenceEntry<Object, Object>> table = segment.table;
assertEquals(1, table.length());
int hash = map.hash(key);
DummyEntry<Object, Object> entry = createDummyEntry(key, hash, value, null);
segment.recordWrite(entry, 1, map.ticker.read());
segment.table.set(0, entry);
segment.readCount.incrementAndGet();
segment.count = 1;
segment.totalWeight = 1;
assertSame(entry, table.get(0));
assertSame(entry, segment.accessQueue.peek());
assertSame(entry, segment.writeQueue.peek());
segment.clear();
assertNull(table.get(0));
assertTrue(segment.accessQueue.isEmpty());
assertTrue(segment.writeQueue.isEmpty());
assertEquals(0, segment.readCount.get());

代码示例来源:origin: google/guava

public void testRecordReadOnGet() {
 for (CacheBuilder<Object, Object> builder : allEvictingMakers()) {
  LocalCache<Object, Object> map = makeLocalCache(builder.concurrencyLevel(1));
  Segment<Object, Object> segment = map.segments[0];
  List<ReferenceEntry<Object, Object>> writeOrder = Lists.newLinkedList();
  for (int i = 0; i < DRAIN_THRESHOLD * 2; i++) {
   Object key = new Object();
   int hash = map.hash(key);
   Object value = new Object();
   map.put(key, value);
   ReferenceEntry<Object, Object> entry = segment.getEntry(key, hash);
   writeOrder.add(entry);
   readOrder.add(entry);
  assertTrue(segment.recencyQueue.isEmpty());
   ReferenceEntry<Object, Object> entry = i.next();
   if (random.nextBoolean()) {
    map.get(entry.getKey());
    reads.add(entry);
    i.remove();
    assertTrue(segment.recencyQueue.size() <= DRAIN_THRESHOLD);
  int undrainedIndex = reads.size() - segment.recencyQueue.size();
  checkAndDrainRecencyQueue(map, segment, reads.subList(undrainedIndex, reads.size()));
  readOrder.addAll(reads);

代码示例来源:origin: google/guava

public void testDrainRecencyQueueOnWrite() {
 for (CacheBuilder<Object, Object> builder : allEvictingMakers()) {
  LocalCache<Object, Object> map = makeLocalCache(builder.concurrencyLevel(1));
  Segment<Object, Object> segment = map.segments[0];
  if (segment.recencyQueue != DISCARDING_QUEUE) {
   Object keyOne = new Object();
   Object valueOne = new Object();
   Object keyTwo = new Object();
   Object valueTwo = new Object();
   map.put(keyOne, valueOne);
   assertTrue(segment.recencyQueue.isEmpty());
   for (int i = 0; i < DRAIN_THRESHOLD / 2; i++) {
    map.get(keyOne);
   }
   assertFalse(segment.recencyQueue.isEmpty());
   map.put(keyTwo, valueTwo);
   assertTrue(segment.recencyQueue.isEmpty());
  }
 }
}

代码示例来源:origin: google/guava

static void checkEviction(LocalCache<?, ?> map) {
 if (map.evictsBySize()) {
  for (Segment<?, ?> segment : map.segments) {
   drainRecencyQueue(segment);
   assertEquals(0, segment.recencyQueue.size());
   assertEquals(0, segment.readCount.get());
   ReferenceEntry<?, ?> prev = null;
   for (ReferenceEntry<?, ?> current : segment.accessQueue) {
    if (prev != null) {
     assertSame(prev, current.getPreviousInAccessQueue());
     assertSame(prev.getNextInAccessQueue(), current);
    }
    Object key = current.getKey();
    if (key != null) {
     assertSame(current, segment.getEntry(key, current.getHash()));
    }
    prev = current;
   }
  }
 } else {
  for (Segment<?, ?> segment : map.segments) {
   assertEquals(0, segment.recencyQueue.size());
  }
 }
}

代码示例来源:origin: com.google.guava/guava-jdk5

/**
 * Performs eviction if the segment is full. This should only be called prior to adding a new
 * entry and increasing {@code count}.
 */
@GuardedBy("Segment.this")
void evictEntries() {
 if (!map.evictsBySize()) {
  return;
 }
 drainRecencyQueue();
 while (totalWeight > maxSegmentWeight) {
  ReferenceEntry<K, V> e = getNextEvictable();
  if (!removeEntry(e, e.getHash(), RemovalCause.SIZE)) {
   throw new AssertionError();
  }
 }
}

代码示例来源:origin: google/guava

public PackageSanityTests() {
  setDefault(
    CacheLoader.class,
    new CacheLoader<Object, Object>() {
     @Override
     public Object load(Object key) {
      return key;
     }
    });
  setDefault(LocalCache.class, new LocalCache<Object, Object>(CacheBuilder.newBuilder(), null));
  setDefault(CacheBuilder.class, CacheBuilder.newBuilder());
 }
}

代码示例来源:origin: google/guava

public void testSegmentRefresh_duplicate() throws ExecutionException {
 LocalCache<Object, Object> map = makeLocalCache(createCacheBuilder().concurrencyLevel(1));
 Segment<Object, Object> segment = map.segments[0];
 Object key = new Object();
 int hash = map.hash(key);
 AtomicReferenceArray<ReferenceEntry<Object, Object>> table = segment.table;
 int index = hash & (table.length() - 1);
 // already loading
 DummyEntry<Object, Object> entry = DummyEntry.create(key, hash, null);
 DummyValueReference<Object, Object> valueRef = DummyValueReference.create(null);
 valueRef.setLoading(true);
 entry.setValueReference(valueRef);
 table.set(index, entry);
 assertNull(segment.refresh(key, hash, identityLoader(), false));
}

代码示例来源:origin: org.sonatype.sisu/sisu-guava

@GuardedBy("Segment.this")
<K, V> void copyAccessEntry(ReferenceEntry<K, V> original, ReferenceEntry<K, V> newEntry) {
 // TODO(fry): when we link values instead of entries this method can go
 // away, as can connectAccessOrder, nullifyAccessOrder.
 newEntry.setAccessTime(original.getAccessTime());
 connectAccessOrder(original.getPreviousInAccessQueue(), newEntry);
 connectAccessOrder(newEntry, original.getNextInAccessQueue());
 nullifyAccessOrder(original);
}

代码示例来源:origin: com.google.guava/guava-jdk5

@GuardedBy("Segment.this")
 <K, V> void copyWriteEntry(ReferenceEntry<K, V> original, ReferenceEntry<K, V> newEntry) {
  // TODO(fry): when we link values instead of entries this method can go
  // away, as can connectWriteOrder, nullifyWriteOrder.
  newEntry.setWriteTime(original.getWriteTime());
  connectWriteOrder(original.getPreviousInWriteQueue(), newEntry);
  connectWriteOrder(newEntry, original.getNextInWriteQueue());
  nullifyWriteOrder(original);
 }
}

代码示例来源:origin: google/guava

createCacheBuilder().concurrencyLevel(1).removalListener(listener);
final LocalCache<Object, Object> map = makeLocalCache(builder);
Segment<Object, Object> segment = map.segments[0];
int hash = map.hash(one);
int index = hash & (table.length() - 1);
ReferenceEntry<Object, Object> entry = segment.getEntry(one, hash);
ReferenceEntry<Object, Object> newEntry = segment.copyEntry(entry, null);
table.set(index, newEntry);
map.cleanUp(); // force notifications
assertTrue(listener.isEmpty());
assertTrue(map.containsKey(one));
assertEquals(1, map.size());
assertSame(computedObject, map.get(one));

代码示例来源:origin: google/guava

public void testSegmentStoreComputedValue() {
 QueuingRemovalListener<Object, Object> listener = queuingRemovalListener();
 LocalCache<Object, Object> map =
   makeLocalCache(createCacheBuilder().concurrencyLevel(1).removalListener(listener));
 Segment<Object, Object> segment = map.segments[0];
 int hash = map.hash(key);
 AtomicReferenceArray<ReferenceEntry<Object, Object>> table = segment.table;
 int index = hash & (table.length() - 1);
 map.clear();
 listener.clear();
 assertEquals(0, segment.count);
 table.set(index, entry);
 assertTrue(segment.storeLoadedValue(key, hash, valueRef, value3));
 assertSame(value3, segment.get(key, hash));
 valueRef = new LoadingValueReference<>(value3Ref);
 entry.setValueReference(valueRef);
 table.set(index, entry);
 assertSame(value3, segment.get(key, hash));
 assertEquals(1, segment.count);

代码示例来源:origin: google/guava

public void testExpand() {
 LocalCache<Object, Object> map =
   makeLocalCache(createCacheBuilder().concurrencyLevel(1).initialCapacity(1));
 Segment<Object, Object> segment = map.segments[0];
 assertEquals(1, segment.table.length());
  Object key = new Object();
  Object value = new Object();
  int hash = map.hash(key);
  entry = map.newEntry(key, hash, entry);
  ValueReference<Object, Object> valueRef = map.newValueReference(entry, value, 1);
  entry.setValueReference(valueRef);
 segment.table.set(0, entry);
 segment.count = originalCount;
 ImmutableMap<Object, Object> originalMap = ImmutableMap.copyOf(map);
   segment.expand();
  assertEquals(i, segment.table.length());
  assertEquals(originalCount, countLiveEntries(map, 0));
  assertEquals(originalCount, segment.count);

相关文章

微信公众号

最新文章

更多