Nashorn启动缓慢可以克服吗?

时间:2014-09-12 14:53:32

标签: java performance rhino nashorn java-8

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

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

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

Engine performance compared

我希望图片清晰。

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

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

下面我提供了一个运行时配置文件,说明了引擎随时间的繁忙程度; enter image description here

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


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

1 个答案:

答案 0 :(得分:2)

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

    <dependency>
        <groupId>de.christophkraemer</groupId>
        <artifactId>rhino-script-engine</artifactId>
        <version>1.1.1</version>
    </dependency>

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

二进制文件:here

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

    <dependency>
        <groupId>org.mozilla</groupId>
        <artifactId>rhino</artifactId>
        <version>${rhinoVersion}</version>
    </dependency>

二进制文件:here

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