Details
-
Bug
-
Status: Closed
-
Blocker
-
Resolution: Won't Fix
-
None
-
None
-
None
-
Windows 2003 Server
Description
In Eclipse environment for a maven-based project, Auto-build fires Maven-build which in turn executes CompilerMojo, finally creating an IsolatedClassloader for each compile call !
IsolatedClassLoader.addURL(URL) line: 42...
JavacCompiler.compile(CompilerConfiguration) line: 141
CompilerMojo(AbstractCompilerMojo).execute() line: 493...
DefaultBuildPluginManager.executeMojo(MavenSession, MojoExecution) line: 105...
MavenImpl.execute(MavenExecutionRequest, IProgressMonitor) ...
MavenBuilder.build(int, Map, IProgressMonitor) line: 153 ....
AutoBuildJob.run(IProgressMonitor) line: 238
So every single change in maven-v4 project creates a new IsolatedClassloader which is fine.
But the problem is JavacCompiler is not closing the loader which holds huge number of jars (url points to maven-repo) in its url classpath.
It should use ClassLoaderutil.releaseLoader(..) to unload the jars.
GC does not reclaim the isolatedclassloader instances (not sure why).
As a result, IsolatedClassloader instances consume retains the heap.
Eventually maven-application goes OutOfMemory !
Attached is the heapdump analysis of isolatedclassloader that holds the memory.
This is kind of blocking us from building largescale maven app which requires good number of jars in development time for compiling the app source at development time.
Please note that we face this issue at development time whenever developer making changes in source code as explained in the code-flow above.
Please let us know if more information is required.