How do I "close" a ClassLoader?

Aaron Digulla picture Aaron Digulla · Sep 20, 2011 · Viewed 8.6k times · Source

I have a case where I need to create a lot of class loaders in my application to temporarily make some code visible while user supplied scripts are running. I'm using an URLClassLoader for this and it works pretty well.

When the script terminates, I want to "unload" or "close" the class loader to free the resources.

Is it enough to set the reference to the class loader to null? I'm especially wondering if I'll eventually run out of file handles because the extra classes are in JAR files.

PS: Must work with Java 5 and up. Yeah, I know...

Answer

aspiring_sarge picture aspiring_sarge · Jun 28, 2014

A little late, but hopefully this'll be helpful for those who come to this Question later (like me).

With Java 7, a close() method has been added to URLClassLoader, which is exactly what OP was asking for.

EDIT (thanks to @Hot Licks): OK, so it isn't exactly what the OP has asked for. It doesn't free up all the resources, or make the resources and the loader collectible. It simply prevents the loading of more resources using the class loader. It does, however, close the jar file that was loaded with the URLClassLoader.