From f9edc314bb21b84b2d9b0a9e5be9a456f7df5401 Mon Sep 17 00:00:00 2001 From: leventov Date: Fri, 5 Aug 2016 23:20:50 +0700 Subject: [PATCH] Optimize VanillaChronicleMap.longSize(): don't acquire and close context for each segment, and make it atomic against concurrent map.close() --- .../chronicle/hash/impl/VanillaChronicleHash.java | 11 ----------- .../openhft/chronicle/map/VanillaChronicleMap.java | 12 ++++++++++++ 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/main/java/net/openhft/chronicle/hash/impl/VanillaChronicleHash.java b/src/main/java/net/openhft/chronicle/hash/impl/VanillaChronicleHash.java index 7cc2a00ec..5e3bb0536 100644 --- a/src/main/java/net/openhft/chronicle/hash/impl/VanillaChronicleHash.java +++ b/src/main/java/net/openhft/chronicle/hash/impl/VanillaChronicleHash.java @@ -715,17 +715,6 @@ public abstract class VanillaChronicleHash Integer.MAX_VALUE ? Integer.MAX_VALUE : (int) size; diff --git a/src/main/java/net/openhft/chronicle/map/VanillaChronicleMap.java b/src/main/java/net/openhft/chronicle/map/VanillaChronicleMap.java index f9b31b23c..2a5e08a14 100755 --- a/src/main/java/net/openhft/chronicle/map/VanillaChronicleMap.java +++ b/src/main/java/net/openhft/chronicle/map/VanillaChronicleMap.java @@ -169,6 +169,18 @@ public class VanillaChronicleMap return (V) value; } + @Override + public final long longSize() { + long result = 0L; + try (IterationContext c = iterationContext()) { + for (int segmentIndex = 0; segmentIndex < segments(); segmentIndex++) { + c.initSegmentIndex(segmentIndex); + result += c.size(); + } + } + return result; + } + @Override public Class keyClass() { return keyClass;