// Idea: Every class loader makes only a single class so they can be // garbage collected more easily. srecord noeq LASMultiClassLoader(ClassLoader parent) is ILASClassLoader { settable bool rememberClassBytes; new WeakValueMap definedClasses; Lock lock = lock(); *(Class parent) { this(parent.getClassLoader()); } { definedClasses.onValueForKeyReleased(key -> print(":: CLASS UNLOADED :: " + key)); } public Class defineLASClass(S name, IF0 generateClass) { lock lock; try object definedClasses.get(name); var cl = new InMemoryClassLoader(parent); print("Generating class " + name); Class c = cl.defineAClass(name, generateClass!); definedClasses.put(name, c); ret c; } }