示例程序
ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine jsEngine = mgr.getEngineByName("JavaScript");
System.out.println(jsEngine.eval("a>10 || b<10 || c=10"));
在我的程序中,我使用上面的代码来评估使用javascript函数的1000个表达式,如indexof(),replace,date functions等等。这种表达式曾经在rhino中进行过评估(当平台java版本是java 7)比nashorn快得多....我应该说至少快15~20倍....
将rhino与Java 8一起使用似乎是一项繁琐的工作......有人可以建议解决方法使其更快......
答案 0 :(得分:3)
Rhino有一个解释器,Nashorn将每个表达式编译为JVM字节码,然后在内部加载并运行如此生成的JVM类。因此,除了解析之外,每个eval都会产生字节码生成和JVM类加载成本。
您可以做的一件事是将脚本引擎转换为Compilable,然后使用它来为重复调用创建CompiledScript
。
如果您有许多曾经评估过的表达式,那将无济于事,但它对经常评估的表达式有帮助。