The current intern tables are generally WeakHashMaps with extremely coarse-grained locks. This should instead use a ConcurrentHashMap with weak-pointer support.
(Longer-term, we should investigate using our own persistent HAMT. I bet there's ways to make that more performant than Java's built-in hashes.)