本文整理了Java中com.google.common.cache.LocalCache
类的一些代码示例,展示了LocalCache
类的具体用法。这些代码示例主要来源于Github
/Stackoverflow
/Maven
等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。LocalCache
类的具体详情如下:
包路径:com.google.common.cache.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);
内容来源于网络,如有侵权,请联系作者删除!