A class loader that loads classes from directories and/or zip-format
file such as JAR file. It tracks the modification time of the classes
it loads to permit reloading through re-instantiation.
When the classloader reports its creator that one of the classes it
has loaded has changed on disk, it should discard the classloader
and create a new instance using reinstantiate .
The classes are then reloaded into the new classloader as required.
The classloader can also load resources, which are a means
for packaging application data such as images within a jar file
or directory.
The classloader always first tries to load classes and resources
from the system, and uses it's own path if that fails. This is also
done if an empty repository is passed at construction.
How autoreload works:
The Java VM considers two classes the same if they have the same
fully-qualified name and if they were loaded from the same
ClassLoader .
There is no way for a classloader to 'undefine' a class once it
has been loaded. However, the servlet engine can discard a
classloader and the classes it contains, causing the
The JServServletManager creates a new instance of
the classloader each time it detects that any of the loaded classes
have changed.
Before terminating, all servlets are destroyed.
According to the Java Language Specification (JLS), classes may
be garbage-collected when there are no longer any instances of that
class and the java.lang.Class object is finalizable.
It is intended that this be the case when a JServClassLoader
is discarded.
Many VM releases did not implement class garbage collection
properly. In such a VM, the memory usage will continue to grow if
autoreloading is enable. Running the VM with
-verbosegc (or the corresponding option for
non-Javasoft VMs) may give some debugging information.
It is important that the destroy method be
implemented properly, as servlets may be destroyed and
reinitialized several times in the life of a VM.
author: Dawid Weiss (modifications) author: Francis J. Lacoste author: Martin Pool author: Jim Heintz author: Stefano Mazzocchi See Also: java.lang.ClassLoader |