The only non-reference field in the CompositeNodeState is the path. Assuming we have many node states in the memory, it may be a bit expensive to store their paths in the memory.
On the other hand, after the recent optimizations (see linked issues), the set of the nodes which should be wrapped with the CompositeNodeState is limited to:
- /oak:index and its direct children
That's why it makes sense to use a string cache to store all the paths.