diff --git a/src/main/java/net/openhft/chronicle/map/ChronicleMapBuilder.java b/src/main/java/net/openhft/chronicle/map/ChronicleMapBuilder.java index 11f29490d..0b2bfe620 100644 --- a/src/main/java/net/openhft/chronicle/map/ChronicleMapBuilder.java +++ b/src/main/java/net/openhft/chronicle/map/ChronicleMapBuilder.java @@ -422,14 +422,16 @@ public class ChronicleMapBuilder implements Cloneable, return Math.max(estimateSegments(), minSegments); } - /** - * Heuristic -- number of segments ~= cube root from number of entries seems optimal - */ private int estimateSegments() { + for (int power = 0; power < 7; power++) { + if (entries < (1L << (7 + (2 * power)))) + return 1 << power; + } + // Heuristic -- number of segments ~= cube root from number of entries seems optimal int maxSegments = 65536; - for (int i = 4; i < maxSegments; i <<= 1) { - if (((long) i) * i * i >= entries) - return i; + for (int segments = 4; segments < maxSegments; segments <<= 1) { + if (((long) segments) * segments * segments >= entries) + return segments; } return maxSegments; } diff --git a/src/test/java/net/openhft/chronicle/map/ReplicatedChronicleMapTest.java b/src/test/java/net/openhft/chronicle/map/ReplicatedChronicleMapTest.java index a7d5d7d50..f67549868 100644 --- a/src/test/java/net/openhft/chronicle/map/ReplicatedChronicleMapTest.java +++ b/src/test/java/net/openhft/chronicle/map/ReplicatedChronicleMapTest.java @@ -96,7 +96,7 @@ public class ReplicatedChronicleMapTest extends JSR166TestCase { * Returns a new map from Integers 1-5 to Strings "A"-"E". */ private ChronicleMap map5() throws IOException { - ChronicleMap map = newShmIntString(5); + ChronicleMap map = newShmIntString(10); assertTrue(map.isEmpty()); map.put(JSR166TestCase.one, "A"); map.put(JSR166TestCase.two, "B");