我们正在使用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)
如何加快速度?
答案 0 :(得分:2)
使用分析器,例如FlightRecorder或VisuamVM或YourKit或JProfiler,以找出花费最多的时间并进行优化。
将昂贵的位转换为Java。例如如果一段代码在Javascript中效率不高,请改用Java编写,然后从JS调用。
使用像样的机器来完成您需要的任务。有时候,硬件要比开发人员的时间便宜得多。
如今,即使是最便宜的手机也具有多个内核。一些嵌入式设备只有1个内核,但通常可以通过蓝牙或wifi与服务器联系以进行昂贵的处理。