Details
Description
When I run the code below with 3 statements with closures inside the method the local var (parameter) values (all 4 of them) are staying in memory.
I don't see the same problem if I run corresponding Java code with lambdas.
Run TestOOM.groovy with
-Xmx600M -XX:+HeapDumpOnOutOfMemoryError
Notice groovy fails:
Y
Z
java.lang.OutOfMemoryError: Java heap space
Dumping heap to java_pid147612.hprof ...
Heap dump file created [497819587 bytes in 0.136 secs]
Caught: java.lang.OutOfMemoryError: Java heap space
java.lang.OutOfMemoryError: Java heap space
at test.TestOOM.test(TestOOM.groovy:31)
at test.TestOOM.run(TestOOM.groovy:41)
But Java version does not.
It looks like all the values of s are still in memory (see screenshot), even though previous values should be discarded.