Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
2.4.5
-
None
-
Ubuntu 14.04, Mac osx 10.11.1
Java openJDK 1.8, Java HotSpot 1.8
Description
I have faced with memory leak as soon as I upgraded groovy from 2.4.4 to the latest version (2.4.5).
As I see groovy-2.4.5 version already contains fix for https://issues.apache.org/jira/browse/GROOVY-7591
and uses ClassInfo.class by default. But such fix causes the other memory leak. It is easy to reproduce by simple test:
public class ScriptsMemoryLeak {
public static void main(String[] args) throws ScriptException {
while (true)
}
}
I have run this test with -Xmx20m and OutOfMemoryError occurs after about 400 iterations:
Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded
at sun.misc.URLClassPath$JarLoader.checkResource(URLClassPath.java:771)
at sun.misc.URLClassPath$JarLoader.getResource(URLClassPath.java:843)
at sun.misc.URLClassPath.getResource(URLClassPath.java:199)
at java.net.URLClassLoader$1.run(URLClassLoader.java:364)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:81)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:52)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:154)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:166)
at Script478.run(Script478.groovy:1)
at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:352)
at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:153)
at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:264)
at ish.oncourse.server.scripting.ScriptsMemoryLeak.main(ScriptsMemoryLeak.java:21)
When I added -Dgroovy.use.classvalue=true (followed advice in https://issues.apache.org/jira/browse/GROOVY-7591 to reactivate use of ClassValue) the leak goes away and my test can works infinitely.
Currently I forced to use -Dgroovy.use.classvalue=true option to proper work of my code.
Also I have find other task which was already closed (but probably was not fully done):
https://issues.apache.org/jira/browse/GROOVY-6704
From comment I can see that users still faces with the same issue.
Can someone please advise me will be this memory leak fixed in groovy. If yes, then when I will be able to get rid "-Dgroovy.use.classvalue=true" from my code
Attachments
Issue Links
- is duplicated by
-
GROOVY-7733 Can't unloaded Groovy classes - PermGen Erros
-
- Closed
-
- is related to
-
GROOVY-7683 Memory leak when using Groovy as JSR-223 scripting language.
-
- Closed
-