On 13/03/2017 11:43, Peter Levart wrote:
...but then those Module(s) in the new Layer are reachable from
Class(es) defined in them and those Class(es) are reachable from the
common ClassLoader (ClassLoader.classes Vector). Until all classes
defined by the ClassLoader (from various Layer(s)) become unreachable,
none of the Layer(s) can be unloaded.
Am I right? Is package-private ClassLoader.addClass(Class) invoked by
VM to record every loaded class or just every class loaded into
unnamed module?
Every class (ignoring VM anonymous classes) is kept alive by its
defining class loader. So if you have several layers of modules with the
modules in all layers defined to the same class loader then be won't
become illegible to be GC'ed and unloaded until they are all
unreachable. This shouldn't be a surprise of course.
-Alan