You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@groovy.apache.org by Jeff Adamson <jw...@gmail.com> on 2016/09/28 20:47:14 UTC

GroovyShell memory leak in java7+groovy2.4.7

Using GroovyShell to evaluate expressions appears to leak permgen space in
2.4.7 when run with oracle java 7 jvm.

Should I open a bug report or is there an existing one I can link to?

Using groovy 2.4.7: this script causes perm-gen error in java 1.7. After
approx 24 thousand evaluate calls it slows for a while due to GC overhead,
then expands perm space and usage rises again until failing OOM ~41k calls
and 7 minutes.
Using groovy 2.4.6: failure is same as 2.4.7 after 4.5 minutes
Using groovy 2.4.0: increases perm-gen usage after a couple minutes, it
does reclaim a large chunk and seems to attain a steady state of usage.
completing in 5 minutes.
Using groovy 2.3.9: perm-gen has a steady-state memory usage pattern for
entire run without any slowdowns over 7.5 minutes
Using groovy 1.8.9: same as 2.3.9.

=================================
long sleep = 0;
String scriptText = "println this.binding.variables; return true;";

for (int trial = 0; trial < 100; trial ++) {
Thread.sleep(sleep);
for (int i = 0; i < 1000; i++) {

Map<String,Object> bind = new HashMap<String,Object>();
bind.put("bindingObject", "a binding object "+i);

Object result = null;
System.out.println("Run "+trial+"."+i);

GroovyShell shell = new GroovyShell(new Binding(bind));
result = shell.evaluate(scriptText);

System.out.println(trial+"."+i+" result:"+result);
System.out.println();
}
}
================================

$ export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-i386
$ groovy -version
Groovy Version: 2.4.7 JVM: 1.7.0_111 Vendor: Oracle Corporation OS: Linux
$ groovy groovyOOM.groovy
....
Run 41.381
Caught: java.lang.OutOfMemoryError: PermGen space
Exception in thread "RMI TCP Connection(idle)" java.lang.OutOfMemoryError:
PermGen space
at sun.misc.Unsafe.defineClass(Native Method)
at sun.reflect.ClassDefiner.defineClass(ClassDefiner.java:63)


--Jeff