Bug: 36900

Impact:
Informational

Product:
GemStone/S 64 Bit

Versions:
3.1.0.2, 3.1.0.1, 3.1, 3.0.1, 3.0, 2.4.5.1, 2.4.5, 2.4.4.8, 2.4.4.7, 2.4.4.6, 2.4.4.5, 2.4.4.4, 2.4.4.3, 2.4.4, 2.4.3, 2.4.2, 2.4.1, 2.4, 2.3.1.6, 2.3.1, 2.3, 2.2.5.4, 2.2.5.3, 2.2.5.2, 2.2.5.1, 2.2.5, 2.2.x, 2.2, 2.1.4, 2.1.x, 2.1, 2.0.4, 2.0.3, 2.0.x, 1.2.4, 1.2.x, 1.1.x, 1.x

Platform:
All

Fixed In:

Very large hashed dictionary out of memory on rebuildTable:

If a very large hashed dictionary (such as a KeyValueDictionary)
grows larger, such that a rebuildTable: is required, it may not
be possible to do the rebuildTable: without an out of memory error,
even with maximum TOC, since the entire collection may not be able
to fit in memory.

Workaround:

Reset the collisionLimit of the collection to a much larger value
than the table size.  The rebuildTable: optimizes performance by
reducing the number of collisions in table lookup, it is not
required for correct behavior.

rebuildTable: is called when at:put: is invoked and the collection
has too many collisions, so for large collections, you should
manually control collection size rather than allowing the automatic
growth.  Set the collection size larger than you expect to ever need
it, and size the collisionLimit much larger than the collection size
to avoid rebuild.

If you need a larger table size when the collection is larger than
will fit into memory, you will need to create a new, properly sized
dictionary and add the elements to it, with interim commits.