Details
-
Type:
Bug
-
Status:
Closed
-
Priority:
Critical
-
Resolution: Duplicate
-
Affects Version/s: 1.6.1, 1.6.2, 1.6.3, 1.6.4
-
Fix Version/s: None
-
Component/s: None
-
Labels:None
-
Environment:Windows 32-Bit
-
Number of attachments :
Description
When building larger projects using Groovy ant task there occurs a memory leak. When using Groovy 1.5.7 the leak is not there using all above that version including 1.6.4 the memory leak appears. It seems that classes do not get unloaded so the perm gen space accumulates. When many groovy and groovyc tasks are called in a ant build this becomes visible.
I am using ANT 1.7.1 libraries, but this problem does still occur when using ANT 1.7.0.
I was running JVM with -verbose:gc and found the following difference:
[Unloading class com.nsn.see.sce.entity.ArtifactExecutor]
is there in 1.5.7 but not in 1.6.4. So It does not clean up the classes that is inside the <groovy> task directly. It seems that the classes that are using by the ArtifactExecutor do get cleaned up.
May be the fact that I have nested the taskdef influences this problem?
<taskdef name="groovytools" classname="org.codehaus.groovy.ant.Groovy">
<classpath>
<path refid="groovytools.classpath"/>
</classpath>
</taskdef>
<groovytools>
import com.nsn.see.sce.entity.ArtifactExecutor
new ArtifactExecutor(ant).buildArtifacts()
</groovytools>
I attached the two extracts of the garbage collector.
Issue Links
- is related to
-
GROOVY-3488
Groovy ant task memory leak (re-opened GROOVY-891)
-
analysing further I get the impression that the problem occurs through nesting of groovy tasks:
<target name="A">
<groovy>
ant.antcall("targetB")
</groovy>
</target>
<target name="B">
<groovy>
... some code
</groovy>
</target
In the build scripts there are many of these indirections from ant to groovy to ant and back to groovy. May be this gives problem when cleaning up the class loaders?