Bug 49680

GemStone/S 64 Bit

3.6.5, 3.6.4, 3.6.3, 3.6.2, 3.6.1, 3.6, 3.5.8, 3.5.7, 3.5.6, 3.5.5, 3.5.4, 3.5.3, 3.5.2, 3.5.1, 3.5.x, 3.x, earlier versions

findAllReferences does not work to locate (hidden) LargeObjectNodes

Collections are internally implemented in a tree structure, using instance of a hidden internal class LargeObjectNode. Very large collections may have more than one tree level of LargeObjectNodes.

While <OopOfLargeObjectNode> findAllReferences works to find a visible collection class that is referencing a LargeObjectNode, if the LargeObjectNode is lower down in the tree, as for very large collections, findAllReferences does not return the reference to another LargeObjectNode above it in the tree.

Workaround

You can use methods in GsBitmap to locate the referencing LargeObjectNode.

For example, if the reference path from an element in the collection to the root is:

 anArrayOfSize5M
	-> aLevel1LargeObjectNode
		-> aLevel2LargeObjectNode
   			-> anElementInArray


To find the reference to <aLevel1LargeObjectNode> from <aLevel2LargeObjectNode>, the following code can be used:

    GsBitmap allValidOops primFirstObjectThatReferences: <aLevel2LargeObjectNode>


Note: you can view the internal structure of the base collection using the topaz command dumpobj, e.g.

    topaz 1> dumpobj anArrayOfSize5M


Last updated: 10/6/22