From J. Bloch
A ... source of memory leaks is listeners ... The best way to ensure that callbacks are garbage collected promptly is to store only weak references to them, for instance, by storing them only as keys in a WeakHashMap.
So, why there isn't any WeakSet in the Java Collections framework?