an ItemStateReferenceMap serving as the primary (or main)
cache; it holds weak references to ItemState instances. This
ItemStateCache implementation directly represents the
contents of the primary cache, i.e. isCached(ItemId),
retrieve(ItemId)}, isEmpty() etc. only refer to the contents
of the primary cache.

an ItemStateCache implementing a custom eviction policy and
serving as the secondary (or auxiliary) cache; entries that are automatically
flushed from this secondary cache through its eviction policy (LRU, etc.)
will be indirectly flushed from the primary (reference) cache by the garbage
collector if they are thus rendered weakly reachable.