Improved estimateSegments() heuristic and fix tests

This commit is contained in:
leventov
2014-10-25 01:58:05 +04:00
parent 7a86306e0b
commit ffd66c3f52
2 changed files with 9 additions and 7 deletions
@@ -422,14 +422,16 @@ public class ChronicleMapBuilder<K, V> 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;
}