code: @Override
      protected void classLoaderChanged()
      {
          Vector toRemove = new Vector(); // safely remove
          for ( Enumeration e = listeners.elements(); e.hasMoreElements(); )
          {
              WeakReference wr = (WeakReference)e.nextElement();
              Listener l = (Listener)wr.get();
              if ( l == null )  // garbage collected
                toRemove.add( wr );
              else
                l.classLoaderChanged();
          }
          for( Enumeration e = toRemove.elements(); e.hasMoreElements(); )
              listeners.removeElement( e.nextElement() );
      }
docs: Clear global class cache and notify namespaces to clear their
  class caches.
  
  The listener list is implemented with weak references so that we
  will not keep every namespace in existence forever.