[
https://issues.apache.org/jira/browse/GROOVY-9329?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17470294#comment-17470294
]
Robin commented on GROOVY-9329:
-------------------------------
Please see GROOVY-10440
> OOME raised while `parseClass(scriptText)`
> ------------------------------------------
>
> Key: GROOVY-9329
> URL: https://issues.apache.org/jira/browse/GROOVY-9329
> Project: Groovy
> Issue Type: Bug
> Reporter: Daniel Sun
> Assignee: Daniel Sun
> Priority: Critical
> Fix For: 3.0.0-rc-3
>
> Time Spent: 1h 20m
> Remaining Estimate: 0h
>
> Many groovy users have encountered the OOME while {{parseClass(scriptText)}}
> even if the {{scriptText}} has not been changed.
> The cause of the issue is the script file name is generated via
> {{System.currentTimeMillis()}}, so the script file name will change even if
> the script text is not changed. As a result, many class instances are created
> and cached in {{groovy.lang.GroovyClassLoader#classCache}}, the classes can
> not be GCed, which causes OOME.
> The solution is very simple, the script file name could be generated via md5,
> which will not change if the script text is not changed.
> {code:java}
> def gcl = new GroovyClassLoader()
> while (true) {
> gcl.parseClass('def x = 1')
> }
> {code}
> Error message:
> {code:java}
> java.lang.OutOfMemoryError: Compressed class space
> at ConsoleScript6.run(ConsoleScript6:4)
> at
> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> {code}
--
This message was sent by Atlassian Jira
(v8.20.1#820001)