Nashorn启动缓慢可以克服吗?

Hou*_*man 10 java performance rhino java-8 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类似的速度运行.

sea*_*anf 3

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

    <dependency>
        <groupId>de.christophkraemer</groupId>
        <artifactId>rhino-script-engine</artifactId>
        <version>1.1.1</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

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

二进制文件:这里

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

    <dependency>
        <groupId>org.mozilla</groupId>
        <artifactId>rhino</artifactId>
        <version>${rhinoVersion}</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

二进制文件:这里

顺便说一句,如果您想通过 Java 1.7 获取最新的 Rhino javax.script,您应该请求引擎名称rhino17R5,否则您可能会随机获得旧 Rhino 的实例,它是 JRE 的一部分。所需的确切引擎名称取决于 的版本rhino-script-engine。对于 1.1.1,它是rhino17R5