Is it possible to "reset" a class loader?

Yes you can do this.

If you for example use java.net.URLClassLoader with null as parent: new URLClassLoader( urlArray , null ). Then the bootstrap ClassLoader will be used as parent for your ClassLoader.

Here is an example Class which simply uses a new classloader two reload a class.

package com.anarsoft.agent.regression;

import java.net.URL;
import java.net.URLClassLoader;

public class TestClassLoading {


public static boolean field = false;


public static void main(String[] args)  throws Exception
{


    URL[] urlArray = new URL[] { TestClassLoading.class.getProtectionDomain().getCodeSource().getLocation().toURI().toURL() };

    URLClassLoader firstClassloader = new URLClassLoader( urlArray   , null );

    Class firstClass = firstClassloader.loadClass("com.anarsoft.agent.regression.TestClassLoading");

    firstClass.getField("field").setBoolean(null,true);

    System.out.println(firstClass.getField("field").getBoolean(null));  // true


   URLClassLoader secondClassloader = new URLClassLoader( urlArray   , null );

    Class secondClass = secondClassloader.loadClass("com.anarsoft.agent.regression.TestClassLoading");



    System.out.println(secondClass.getField("field").getBoolean(null));  // false
      // the static field is false since its a new loaded class

}

}