使用Java执行JavaScript的性能下降

时间:2018-12-07 09:02:02

标签: javascript java performance

我们正在使用Java执行非常简单的Java脚本进行某些验证。 Javascript引擎是Nashorn。 使用单线程和1GB的最大内存,我们能够每分钟运行40,000个脚本执行。我们可以通过运行多个线程来提高速度,但是最终将要运行程序的目标计算机可能不是多核计算机。

根据建议,发布代码段。

public class RuleExecutor {

private ScriptEngineManager manager;
private ScriptEngine engine;

public RuleExecutor() {
    this.manager = new ScriptEngineManager();
    this.engine = manager.getEngineByName("JavaScript");
}

public Object execute(String[] inputRow, Rule rule) {
    Object output = new String("");
    Bindings bindings = engine.createBindings(); 
    //code to bind the variables
    ...
    ......      
    bindings.put(.....)
    engine.eval(rule.getExpr(), bindings);
    output = bindings.get(rule.getTarget().trim());

    return output;
} 
}

整个程序中仅存在上述类的一个实例。方法execute()被多次调用。

使用了JDK 8(内部版本1.8.0_101-b13)

如何加快速度?

1 个答案:

答案 0 :(得分:2)

使用分析器,例如FlightRecorder或VisuamVM或YourKit或JProfiler,以找出花费最多的时间并进行优化。

将昂贵的位转换为Java。例如如果一段代码在Javascript中效率不高,请改用Java编写,然后从JS调用。

使用像样的机器来完成您需要的任务。有时候,硬件要比开发人员的时间便宜得多。

如今,即使是最便宜的手机也具有多个内核。一些嵌入式设备只有1个内核,但通常可以通过蓝牙或wifi与服务器联系以进行昂贵的处理。