In Java, there are special objects called Garbage Collection Roots (GC roots). They serve as a root objects for Garbage Collection marking mechanism (see picture).
This article describes four types of GC roots:
It is also mentioned, that:
Classes themselves can be garbage-collected.
GC roots aren't collected thus classes themselves are not GC roots.
So what are GC roots for the classes?
So what are GC roots for the classes?
Classloaders, effectively - via other GC roots.
If there is nothing which can reach a classloader - which means nothing can reach any instances of classes created by that classloader - then both the classloader and the classes it created are eligible for garbage collection.
See more on this question at Stackoverflow