WeakValueMap - with automatic clean-up if you use a RunnablesReferenceQueue