我有一个Spring应用程序,它通过ScriptEngine(graalvm https://docs.oracle.com/en/graalvm/enterprise/20/docs/reference-manual/js/ScriptEngine/提供的引擎)利用JavaScript脚本。我正在考虑使用JVMCI启用Graal JIT编译器,但我不确定这将如何影响我的应用程序的性能,以及它是否将专门用于ScriptEngine或影响整个应用程序。
我是如何添加Graal JIT的
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.10</version>
<executions>
<execution>
<id>copy</id>
<phase>process-test-classes</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>org.graalvm.compiler</groupId>
<artifactId>compiler</artifactId>
<version>${graalvm.version}</version>
<type>jar</type>
<overWrite>true</overWrite>
<destFileName>compiler.jar</destFileName>
</artifactItem>
<artifactItem>
<groupId>org.graalvm.compiler</groupId>
<artifactId>compiler-management</artifactId>
<version>${graalvm.version}</version>
<type>jar</type>
<overWrite>true</overWrite>
<destFileName>compiler-management.jar</destFileName>
</artifactItem>
<artifactItem>
<groupId>org.graalvm.truffle</groupId>
<artifactId>truffle-api</artifactId>
<version>${graalvm.version}</version>
<type>jar</type>
<overWrite>true</overWrite>
<destFileName>truffle-api.jar</destFileName>
</artifactItem>
<artifactItem>
<groupId>org.graalvm.sdk</groupId>
<artifactId>graal-sdk</artifactId>
<version>${graalvm.version}</version>
<type>jar</type>
<overWrite>true</overWrite>
<destFileName>graal-sdk.jar</destFileName>
</artifactItem>
</artifactItems>
<outputDirectory>${compiler.dir}</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<configuration>
<arguments>
<argument>--module-path</argument>
<!-- automatically creates the modulepath using all project dependencies, also adding the project build directory -->
<modulepath/>
<argument>-classpath</argument>
<!-- automatically creates the classpath using all project dependencies, also adding the project build directory -->
<classpath/>
<argument>-XX:+UnlockExperimentalVMOptions</argument>
<argument>-XX:+EnableJVMCI</argument>
<argument>-XX:-UseJVMCICompiler</argument>
<argument>--upgrade-module-path=${compiler.dir}/compiler.jar${path.separator}${compiler.dir}/compiler-management.jar</argument>
<argument>org.benchmark.demo.Main</argument>
</arguments>
</configuration>
我的主要关切是:
1.如果我通过JVMCI为Graal启用JIT编译器,它会专门增强ScriptEngine的性能,还是会对整个应用程序的执行产生更广泛的影响?
1.通过JVMCI的Graal JIT编译器是否被认为是JVM生态系统中的顶级选择?
此外,我想用Graal JIT优化ScriptEngine的性能,而不影响应用程序的其他组件。是否有实现这一目标的战略或建议?
1条答案
按热度按时间xesrikrc1#
使用Graal JIT执行这段代码不应该给您带来给予性能上的损失,而恰恰相反。你应该确保你确实在执行JIT编译的代码,而不仅仅是解释的代码,这会慢得多。
我们的一般建议是使用GraalVM JDK,这将为您提供最佳性能和预热。如果出于某种原因你不想使用Graal JIT,你可以使用
-XX:-UseJVMCICompiler
来禁用它,这会有效地为你提供一个OpenJDK设置。随着我们在下一个版本中所做的更改,您的用例应该会变得更简单,它将于下周发布。