Hi, We are testing Nashorn usage and we have a big issue on metaspace usage. We can’t figure out why metaspace show a sawtooth that correspond to a grow and a consequent GC when its limit is reached, suggesting a class loader leak is somewhere. The metaspace patter was 1:1 with number of classes like many compilation were needed.
The problem seems to be around a loop where we add callable tasks to a thread pool to be executed and how to pass parameters to the js function that represent the task logic. We found a solution for the high number of compiled classes using a code like: var tasks = arrayForTask.map(function(dataForTask, i) { return new Callable({ call: function () { print("task A " + i); } }); }); So now classes do now grow as before but the metaspace always grows… I can’t find any source that clearly explain where the compiled js functions are stored (lambda form) into memory, I can understand that compilation is needed when nashorn think the js function body changed, like for references to different globals and so on. So in the end should I always expect a metaspace grow controlled by the GC?? even if the code has no leak? that seems to be kind of reasonable cause the JIT compilation is needed for a dynamic language that has no defined “class” structure but I can’t understand if GC should be the only limit to my OOME or if a leak is somewhere… Thanks, Riccardo. -- Riccardo Maggi Manager, Software Development Hotels.com – An Expedia Inc. Company Venere Net S.r.l. con socio unico Via della Camilluccia 693, Roma, Italia Soggetta a direzione e coordinamento di Hotels.com LP Capitale 1.120.600 (i. v.) Sociale Codice Fiscale e P.IVA 05649781001 REA di Roma 910870