Reloading and Loading JAR Files at Runtime
To enable your Java system to load and reload classes while running, consider the following:
Reloading Existing Classes
Attempting to reload existing classes with their data is generally inadvisable as it may result in system instability.
Adding New Classes
Loading new classes into separate class loaders is a viable option:
ClassLoader loader = URLClassLoader.newInstance(new URL[] { yourURL }, getClass().getClassLoader()); Class<?> clazz = Class.forName("mypackage.MyClass", true, loader); Class<? extends Runnable> runClass = clazz.asSubclass(Runnable.class); Constructor<? extends Runnable> ctor = runClass.getConstructor(); Runnable doRun = ctor.newInstance();
Class Loader Garbage Collection
Class loaders that are no longer in use can be reclaimed by the garbage collector, assuming there are no memory leaks (which may occur with ThreadLocal, JDBC drivers, etc.).
Data Persistence
To preserve object data across class reloads, consider persistence mechanisms like serialization.
Fancy Debugging Tricks
While debugging systems provide advanced capabilities, they are often less reliable and harder to debug.
Adding Classes to an Existing Class Loader
Although URLClassLoader allows adding new URLs, if a class fails to load initially, it will never load within that class loader instance.
The above is the detailed content of How Can I Reload or Add JAR Files to a Running Java Application?. For more information, please follow other related articles on the PHP Chinese website!