JVMCI即时生产线(Graal生产线)

alen0pnh  于 8个月前  发布在  其他
关注(0)|答案(1)|浏览(70)

我有一个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的性能,而不影响应用程序的其他组件。是否有实现这一目标的战略或建议?

xesrikrc

xesrikrc1#

使用Graal JIT执行这段代码不应该给您带来给予性能上的损失,而恰恰相反。你应该确保你确实在执行JIT编译的代码,而不仅仅是解释的代码,这会慢得多。
我们的一般建议是使用GraalVM JDK,这将为您提供最佳性能和预热。如果出于某种原因你不想使用Graal JIT,你可以使用-XX:-UseJVMCICompiler来禁用它,这会有效地为你提供一个OpenJDK设置。
随着我们在下一个版本中所做的更改,您的用例应该会变得更简单,它将于下周发布。

相关问题