adopt Map.computeIfAbsent; use WeakHashMap for atom pool