Boa Tarde estou usando o Nashorn é o Java 8 para poder processar script JavaScript só que o consumo de memoria esta muito alto alguém tem alguma sugestão de como resolver?
O que você considera como consumo alto?
Quantos MB?
Tem que ver que seu laço instancia muitas String
e você também está executando JUnit
.
Bom dia, eu disponibilizei 3 GB ele consome tudo até travar a aplicação é normalmente não executa 10% do processo.
Pelo que eu vi o metodo “eval” ele mantém o script processado em cache tem alguma forma de limpar cache ou esse não seria o procedimento correto?
Você realmente precisa internalizar a String
?
Quando você faz um intern()
o Java vai procurar aquele mesmo valor em um pool interno de String
únicas, se já houver essa String
no pool, ele vai utilizar aquela, senão vai usar uma nova instância.
No seu exemplo a String é criada a partir do valor do contador, então sempre será diferente, não vejo necessidade do intern()
.
Além disso, você pode reutilizar um mesmo objeto Bindings
para o eval
a cada iteração.
Veja se assim não melhora:
Bindings bindings = new SimpleBindings();
ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine engine = factory.getEngineByName("nashorn");
for (int i = 1; i < 100001; i++) {
Object resultado = engine.eval(" 1 + " + i, bindings);
System.out.println(resultado);
}