Если вы посмотрите на реализацию класса java.lang.ClassLoader, вы обнаружите, что фактическая копия объектов класса происходит «за кулисами» JVM. Информация о классе получена собственными методами (например, findLoadedClass0), а ClassLoader вызывает собственный метод defineClass1 для определения нового класса, когда это необходимо. Как эти методы реализованы, зависит от JVM.
Таким образом, нет необходимости поддерживать эти ссылки для целей создания объектов. Однако, как государства комментариев в вектор объектов класса в исходном коде java.lang.ClassLoader:
// The classes loaded by this class loader. The only purpose of this table
// is to keep the classes from being GC'ed until the loader is GC'ed.
// private final Vector<Class<?>> classes = new Vector<>();
Следствием этого является то, что если вам нужно освободить память неиспользуемых определений класса, необходимо GC в ClassLoader сам. Это возможно, если нет объекта, содержащего ссылку на любой из классов, загруженных этим загрузчиком классов, и вы можете просто забыть ссылку на этот загрузчик классов. Это именно то, что происходит на серверах приложений JEE и контейнерах OSGi, когда они выгружают веб-приложения и плагины.
загрузчик классов является частью JVM, который фактически хранит сведения о структуре классов в памяти, такие как методы полей и т. Д. Для системы, а вновь созданный объект является зеркальной копией этой структуры классов в памяти, на которой вы фактически выполняете свои операции. –