あなたはクラスはjava.lang.ClassLoaderの実装を見れば、あなたはClassオブジェクトの実際のインスタンス化は、JVMによって「舞台裏」が起こることがわかります。クラス情報はネイティブメソッド(findLoadedClass0など)によって取得され、ClassLoaderはネイティブメソッドdefineClass1を呼び出して必要なときに新しいクラスを定義します。これらのメソッドの実装方法は、JVMによって異なります。
したがって、それは、オブジェクトのインスタンス化のためにこれらの参照を維持する必要はありません。状態ははjava.lang.ClassLoaderのソースコード内のClassオブジェクトのベクトルにコメントとしてしかし、:
// 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<>();
結果は、未使用のクラス定義のメモリを解放する必要がある場合、あなたはClassLoaderをGCに必要があるということです自体。そのクラスローダーによってロードされたクラスへの参照を含むオブジェクトがなく、そのクラスローダーへの参照を忘れることができます。これは、JEEアプリケーションサーバーとOSGiコンテナがWebアプリケーションとプラグインをアンロードするときに起こっていることです。
class loaderはシステムのフィールドメソッドなどのメモリにクラス構造の詳細を実際に格納するJVMの一部であり、実際に操作を実行するメモリ内のそのクラス構造のミラーコピーです。 –