This page contains an archived post to the Design Forum (formerly called the Flexible Java Forum) made prior to February 25, 2002.
If you wish to participate in discussions, please visit the new
Unloading and Reloading Types
Posted by Bill Venners on 22 Dec 1998, 7:47 PM
> I've been trying to write a class loader which allows me to 'reload'
> classes on request without any luck so far.
> What makes them get ditched?
> Any chance of more detail on how 'Live replacement' would work?
> I saw something about problems with the CLASSPATH in previous messages?
A class loader and the types it has loaded can be unloaded
if there are no more references to any of it from anywhere in
else in the program. So to make the classes loaded into a name
space available for garbage collection, you must just free up
all references to the class loader, to any instances of classes
loaded by that class loader, and to any
instances representing types loaded into that name space.
To "reload" classes, however, you don't really need to ditch
the already loaded classes -- just create a new name space and
load the classes into that. Once a type is loaded into a name
space, it can be unloaded, but it can't be replaced. To "reload"
a type, you must create a fresh name space and load stuff into
that name space, then use that name space instead of the
previously existing one. So just create a new class loader and
load the stuff again, and you'll have accomplished your
reloading. Release all references to the old name space, and
you'll make that stuff available for GC.