# A mutable argument is an entry you cannot find again

first call  : byList([java]) -> tags=[java]
  cache "mutable":
    key [java]                 [ArrayList]   ->  tags=[java]

the caller mutates the same list it passed in: [java, spring]
second call : byList([java, spring]) -> tags=[java, spring]

  cache "mutable":
    key [java, spring]         [ArrayList]   ->  tags=[java]
    key [java, spring]         [ArrayList]   ->  tags=[java, spring]

Two entries, and their keys now print identically - because they are the
same object. The caller mutated the list it had already handed over as a
key, so the first entry sits in the map under a hashCode the map no longer
agrees with. Nothing will find it again and nothing will evict it: a leak
with a completely ordinary-looking cause.
