There is no strong chain of references from the static singleton to the class in the cache.  Where is that chain?  

There are such a strong references if the classes (or any instances to it) are held outside of the cache - but one can design one's use of plus() to ensure that all references to such are freed when you're going to unload the classloader (ditch the scopes that know about them, and re-create them from modules from the new classloader).  

In terms of this cache, there are weakreference map entries which hold the reference to the class caches, and if all other references outside of this cache are released, then the only way to get at the objects is through the weak reference.