项目:bts
文件:MapMakerInternalMap.java
/**
* Creates a new,empty map with the specified strategy,initial capacity and concurrency level.
*/
MapMakerInternalMap(MapMaker builder) {
concurrencyLevel = Math.min(builder.getConcurrencyLevel(),MAX_SEGMENTS);
keyStrength = builder.getKeyStrength();
valueStrength = builder.getValueStrength();
keyEquivalence = builder.getKeyEquivalence();
valueEquivalence = valueStrength.defaultEquivalence();
maximumSize = builder.maximumSize;
expireAfterAccessNanos = builder.getExpireAfterAccessNanos();
expireAfterWriteNanos = builder.getExpireAfterWriteNanos();
entryFactory = EntryFactory.getFactory(keyStrength,expires(),evictsBySize());
ticker = builder.getTicker();
removalListener = builder.getRemovalListener();
removalNotificationQueue = (removalListener == NullListener.INSTANCE)
? MapMakerInternalMap.<RemovalNotification<K,V>>discardingQueue()
: new ConcurrentLinkedQueue<RemovalNotification<K,V>>();
int initialCapacity = Math.min(builder.getInitialCapacity(),MAXIMUM_CAPACITY);
if (evictsBySize()) {
initialCapacity = Math.min(initialCapacity,maximumSize);
}
// Find power-of-two sizes best matching arguments. Constraints:
// (segmentCount <= maximumSize)
// && (concurrencyLevel > maximumSize || segmentCount > concurrencyLevel)
int segmentShift = 0;
int segmentCount = 1;
while (segmentCount < concurrencyLevel
&& (!evictsBySize() || segmentCount * 2 <= maximumSize)) {
++segmentShift;
segmentCount <<= 1;
}
this.segmentShift = 32 - segmentShift;
segmentMask = segmentCount - 1;
this.segments = newSegmentArray(segmentCount);
int segmentCapacity = initialCapacity / segmentCount;
if (segmentCapacity * segmentCount < initialCapacity) {
++segmentCapacity;
}
int segmentSize = 1;
while (segmentSize < segmentCapacity) {
segmentSize <<= 1;
}
if (evictsBySize()) {
// Ensure sum of segment max sizes = overall max size
int maximumSegmentSize = maximumSize / segmentCount + 1;
int remainder = maximumSize % segmentCount;
for (int i = 0; i < this.segments.length; ++i) {
if (i == remainder) {
maximumSegmentSize--;
}
this.segments[i] =
createSegment(segmentSize,maximumSegmentSize);
}
} else {
for (int i = 0; i < this.segments.length; ++i) {
this.segments[i] =
createSegment(segmentSize,MapMaker.UNSET_INT);
}
}
}
项目:j2objc
文件:MapMakerInternalMap.java
/**
* Creates a new,MapMaker.UNSET_INT);
}
}
}
项目:guava-libraries
文件:MapMakerInternalMap.java
/**
* Creates a new,MapMaker.UNSET_INT);
}
}
}
项目:VectorAttackScanner
文件:MapMakerInternalMap.java
/**
* Creates a new,MapMaker.UNSET_INT);
}
}
}
项目:My-Wallet-Android
文件:MapMakerInternalMap.java
/**
* Creates a new,MapMaker.UNSET_INT);
}
}
}
项目:cnGuava
文件:MapMakerInternalMap.java
/**
* Creates a new,MapMaker.UNSET_INT);
}
}
}
项目:org.openntf.domino
文件:MapMakerInternalMap.java
/**
* Creates a new,MapMaker.UNSET_INT);
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。