Fix memory leak by disposing a classloader. The real issue though is located in TypeInfoParser, that has WeakHashMap with values referencing keys.

This commit is contained in:
Maxim Shafirov
2012-02-02 20:35:15 +04:00
parent 14ab62cf7a
commit 04b0699cd5
4 changed files with 28 additions and 9 deletions
@@ -174,7 +174,7 @@ public class CompileEnvironment {
}
private List<Module> runDefineModules(String moduleFile, ClassFileFactory factory) {
ClassLoader loader = myStdlib != null ? new GeneratedClassLoader(factory, new URLClassLoader(new URL[] {myStdlib}, AllModules.class.getClassLoader())) : new GeneratedClassLoader(factory);
GeneratedClassLoader loader = myStdlib != null ? new GeneratedClassLoader(factory, new URLClassLoader(new URL[] {myStdlib}, AllModules.class.getClassLoader())) : new GeneratedClassLoader(factory);
try {
Class namespaceClass = loader.loadClass(JvmAbi.PACKAGE_CLASS);
final Method method = namespaceClass.getDeclaredMethod("project");
@@ -188,9 +188,13 @@ public class CompileEnvironment {
ArrayList<Module> answer = new ArrayList<Module>(AllModules.modules);
AllModules.modules.clear();
return answer;
} catch (Exception e) {
}
catch (Exception e) {
throw new ModuleExecutionException(e);
}
finally {
loader.dispose();
}
}
public ClassFileFactory compileModule(Module moduleBuilder, String directory) {