mirror of
https://github.com/OpenHFT/Chronicle-Map.git
synced 2021-09-13 01:26:12 +00:00
Optimize VanillaChronicleMap.longSize(): don't acquire and close context for each segment, and make it atomic against concurrent map.close()
This commit is contained in:
@@ -715,17 +715,6 @@ public abstract class VanillaChronicleHash<K,
|
||||
return (int) (sizeInBytes / chunkSize) + 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final long longSize() {
|
||||
long result = 0L;
|
||||
for (int i = 0; i < segments(); i++) {
|
||||
try (SC c = segmentContext(i)) {
|
||||
result += c.size();
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public final int size() {
|
||||
long size = longSize();
|
||||
return size > Integer.MAX_VALUE ? Integer.MAX_VALUE : (int) size;
|
||||
|
||||
@@ -169,6 +169,18 @@ public class VanillaChronicleMap<K, V, R>
|
||||
return (V) value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final long longSize() {
|
||||
long result = 0L;
|
||||
try (IterationContext<K, V, ?> c = iterationContext()) {
|
||||
for (int segmentIndex = 0; segmentIndex < segments(); segmentIndex++) {
|
||||
c.initSegmentIndex(segmentIndex);
|
||||
result += c.size();
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<K> keyClass() {
|
||||
return keyClass;
|
||||
|
||||
Reference in New Issue
Block a user