Nashorn创业缓慢可以克服吗?

我使用Rhino作为图形内部的脚本组件。 在该项目中,大约有200个小脚本独立运行。 启动应用程序时,脚本应立即全速运行。 Rhino的表现已经足够了,但自从Oracle建议迁移到Nashorn之后,我面临着一个困境。

下图显示了Rhino和Nashorn之间的负载差异,大约有15,000个脚本调用。 Nashorn的创业缓慢是我最大的问题。

注意,这是在JDK 1.8.0上。 JDK 1.8u5是类似的

发动机性能比较

我希望图片清晰。

这是我如何使用ScriptEngine的概述:

  • 我正在使用One scripting Engine实例,
  • 我为每个脚本创建一个CompiledScript对象,
  • Swingworker执行一次CompiledScript.eval()。
  • 每半秒SwingWorkers就会启动。
  • 每个CompiledScript都有自己的SimpleScriptContext实例,可以在每次执行时重复使用。

下面我包含了一个运行时配置文件,说明了引擎随时间的繁忙程度; 在此处输入图像描述

有谁知道如何克服Nashorn的创业缓慢?


更新于2015年4月15日
在Java8u45上使用200个单独的脚本进行相同的测试。
性能要好得多! 在Java7上运行与Rhino类似。

在Java 1.8上,您可以通过使用此Maven依赖项并请求引擎rhino通过javax.script API使用Rhino:

   de.christophkraemer rhino-script-engine 1.1.1  

主页: https : //github.com/cevou/rhino-script-engine

二进制文件: 这里

如果你想要最新版本的Rhino,可以通过添加如下内容来覆盖它:

   org.mozilla rhino ${rhinoVersion}  

二进制文件: 这里

顺便提一下,如果你想通过javax.script使用Java 1.7上的最新Rhino,你应该请求引擎名称rhino17R5或者你可以随机获得一个旧的Rhino实例,它是JRE的一部分。 所需的确切引擎名称取决于rhino-script-engine的版本。 对于1.1.1,它是rhino17R5