Hi, we are using Groovy in our web-application. There we create a "lot" of
dynamic String and are handling that with the TemplateEngine as we need more
complex expressions there. Now we noticed that we are running into a kind of
weird OOM situation. I could narrow the problem down to a quite simple
reproducible example: 
package kos.tools.template;import java.util.HashMap;import
java.util.Map;import javax.script.Bindings;import
javax.script.ScriptEngine;import javax.script.ScriptEngineManager;import
javax.script.SimpleBindings;public class Test { public static void
main(String[] args) throws Exception {          ScriptEngineManager factory = 
new
ScriptEngineManager();          ScriptEngine engine =
factory.getEngineByName("groovy");                              String template 
= "step-${i}";                  
String groovy =                         "def engine = new 
groovy.text.GStringTemplateEngine();\n"
+                       "def res = 
engine.createTemplate(template).make(bindings);\n" +                 
"return res.toString();";               for (int i = 0; i < (10000000); i++) {  
                Bindings
vars = new SimpleBindings();                    vars.put("template", template); 
                                
Map<String, Object> templateObjects = new HashMap<>();          
vars.put("bindings", templateObjects);                  
templateObjects.put("i", i);            
Object res = engine.eval(groovy, vars);                                         
if (i % 100 == 0) {                     
System.out.println("->" + res);                 }               }       }       
}
Running that example with an Oracle JDK 1.8 and a quite small memory (just
for keeping the running time small) of 32M leads to an OOM at around 2500
steps. I opened up a disussion on Stackoverflow where John Vint gave me some
hints ( see here
<http://stackoverflow.com/questions/37992822/groovy-templateengines-and-outofmemory-possible-memory-leak?>
 
) and it might be also a bug of the GarbageCollector itself. But in essence
I think there should be a way to use the TemplateEngine in a stable way. I
am happy for any suggestions and examples of how to solve this situation.
Tino



--
View this message in context: 
http://groovy.329449.n5.nabble.com/TemplateEngines-and-Out-of-Memory-tp5733514.html
Sent from the Groovy Users mailing list archive at Nabble.com.

Reply via email to