我刚刚设置了一个Centos7虚拟机来玩GraalVM.我下载了graalvm-1.0.0-rc1,安装了Netbeans8.2,并下载了FastR扩展(通过gu).然后我编写了一个简单的java程序来测试一些支持的各种语言.以下是我写的代码:
package javatest;
import org.graalvm.polyglot.*;
import java.io.PrintStream;
import java.util.Set;
public class JavaTest {
public static void main(String[] args) {
PrintStream output = System.out;
Context context = Context.create();
Set<String> languages = context.getEngine().getLanguages().keySet();
output.println("Current Languages available in GraalVM: " + languages);
// TODO code application logic here
System.out.println("Java: Hello World");
context.eval("js","print('JavaScript: Hello World')");
context.eval("R", "print('R: Hello World');");
}
}
Run Code Online (Sandbox Code Playgroud)
输出如下:
run:
Current Languages available in GraalVM: [R, js, llvm]
Java: Hello World
JavaScript: Hello World
FastR unexpected failure: error loading libR from: …Run Code Online (Sandbox Code Playgroud) Run Code Online (Sandbox Code Playgroud)IllegalStateException: No language and polyglot implementation was found on the classpath. Make sure the truffle-api.jar is on the classpath.
我想在我的 Java 项目中使用 GraalVM。
我将此依赖项添加到我的 pom.xml 中
<dependency>
<groupId>org.graalvm.js</groupId>
<artifactId>js-scriptengine</artifactId>
<version>1.0.0-rc10</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
但显然这还不够。
我还需要做什么才能修复此错误?
我想知道为什么 Java 应用程序的 GraalVM (SubstrateVM) 本机映像使其运行时运行时行为将消耗更少的内存,但如果正常运行,它将消耗更多的内存?
为什么普通的 JIT 不能同样消耗少量内存?
我们正在为我们的堆栈评估 GraalVM。主要考虑因素之一是性能,这里有一些基准: https: //renaissance.dev/。
问题是我们希望看到其他语言实现的基准,而不是 OpenJDK 和 GraalVM 版本之间的基准。我唯一能找到的就是这篇文章,将它与 C2 进行比较。https://medium.com/graalvm/graalvm-20-1-7ce7e89f066b
我们的谷歌搜索没有发现任何其他结果。
我们在哪里可以找到更广泛的、跨语言的 GraalVM 基准测试?
我使用的是在防火墙后面运行的 MacOS Catalina 10.15.7 计算机。
\n我开始评估 Micronaut 和 Quarkus 作为 Spring boot 的替代品,其主要原因之一是能够编译为本机映像。
\n为了能够做到这一点,我必须安装 GraalVM。我按照此处GraalVM Community Edition 20.3.0 的说明下载了 graalvm-ce-java11-darwin-amd64-20.3.0.tar.gz,将其解压缩到我选择的文件夹中,然后导出/Users/myId/work/dev/graalvm/graalvm-ce-java11-20.3.0/Contents/Home/为 GRAALVM_HOME 并添加了 GRALLVM_HOME\\垃圾箱在我的道路上。
之后,我访问https://code.quarkus.io/并上传了一个Hello World要使用 gradle 构建的 Quarkus 项目(6.8)。
当我运行时,gardle build一切都构建正常。\n当我运行时,gradle quarkusDev应用程序启动正常,我可以到达Hello World终点。
但是,当我尝试构建本机映像时,gradle build -Dquarkus.package.type=native出现以下异常
java.lang.RuntimeException: Cannot find the `native-image` in the GRAALVM_HOME, JAVA_HOME and System PATH. Install it using `gu install native-image`\nRun Code Online (Sandbox Code Playgroud)\ngu install native-image …
我们将 Apache Ant 与 Nashorn JavaScript Engine 结合使用,该引擎在 jdk 15 及更高版本中已被弃用并删除。我试图找到如何从 Nashorn 切换到 Graal VM,但即使在 Apache 网站上也没有找到任何可用的信息。请告知我需要哪些罐子以及我应该放置它们。我们的代码需要改变什么。如果有人已经这样做了,请分享您的经验。我有一个针对 jdk1.8.0_311 运行的示例:
<?xml version="1.0" ?>
<project name="test" default="test">
<property environment="env"/>
<target name="test" >
<script language="javascript">
<![CDATA[
load("nashorn:mozilla_compat.js");
importPackage(java.time);
var today = new Date();
var date = today.getFullYear()+'-'+(today.getMonth()+1)+'-'+today.getDate();
self.log("This script is for Test Of Nashorn Javascript Engine");
print ("Today is: " + date );
]]>
</script>
</target>
</project>
Run Code Online (Sandbox Code Playgroud)
结果看起来像:
test:
[script] Warning: Nashorn engine is planned to be removed from a future JDK release …Run Code Online (Sandbox Code Playgroud) 我正在尝试在 MacOS 上为 AWS Lambda 函数构建本机映像。该应用程序在 IDE 中编译并运行得很好,但当我尝试本机映像构建时遇到以下问题:
mvn clean install -Dnative -Dquarkus.native.container-build=true
mvn clean install -Pnative -Dquarkus.native.container-build=true
Run Code Online (Sandbox Code Playgroud)
在我的 pom.xml 文件中使用以下内容,构建失败
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-amazon-lambda</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)
错误:4 种方法中不支持的功能详细消息:错误:在图像堆中检测到 Random/SplittableRandom 类的实例。在图像生成过程中创建的实例已缓存种子值,并且行为不符合预期。要查看该对象是如何实例化的,请使用 --trace-object-instantiation=java.util.Random。该对象可能是由类初始值设定项创建的,并且可以从静态字段访问。您可以使用选项 --initialize-at-run-time= 在图像运行时请求类初始化。或者您可以编写自己的初始化方法并从主入口点显式调用它们。跟踪:通过读取常量 com.amazonaws.retry.PredefinedBackoffStrategies$EqualJitterBackoffStrategy@a7c6c06 字段达到对象 com.amazonaws.retry.PredefinedBackoffStrategies$EqualJitterBackoffStrategy.random 通过读取常量 com 的字段 com.amazonaws.retry.PredefinedBackoffStrategies$SDKDefaultBackoffStrategy.equalJitterBackoffStrategy 达到对象通过扫描方法 com.amazonaws.retry.PredefaultBackoffStrategies$SDKDefaultBackoffStrategy@6f61d2d9 到达 .amazonaws.retry.PredefinedRetryPolicies.getDefaultBackoffStrategy(PredefinedRetryPolicies.java:110)
如果我将 pom 文件更改为以下内容
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-amazon-lambda-archetype</artifactId>
<version>2.4.2.Final</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
构建成功且没有错误,但例如 function.zip 未在 /target 目录中创建。
[/target目录的内容]
[测试环境]
我目前正在开发一个 GitHub CI,它可以使用 JIB buildpack 自动构建容器。
我想知道是否可以结合 JIB 和 GraalVM 来构建本机解决方案?
jobs:
publish:
runs-on: ubuntu-latest
steps:
- name: downcase IMAGE_NAME
run: |
echo "IMAGE_NAME=${GITHUB_REPOSITORY,,}" >>${GITHUB_ENV}
- uses: actions/checkout@v2
- name: Set up JDK 17
uses: actions/setup-java@v2
with:
distribution: 'adopt'
java-version: 17
- name: Buil JIB container and publish to GitHub Packages
run: |
mvn compile com.google.cloud.tools:jib-maven-plugin:3.1.4:build \
-Djib.to.image=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.event.release.tag_name }} \
-Djib.to.auth.username=${{ env.USERNAME }} \
-Djib.to.auth.password=${{ env.PASSWORD }} \
-Djib.from.image=azul/zulu-openjdk:17-jre-headless
Run Code Online (Sandbox Code Playgroud)
您认为在这种情况下可以将 JIB …
我正在尝试使用 GraalVM 构建本机 Quarkus 映像,但遇到以下构建失败错误:
[ERROR] Failed to execute goal io.quarkus.platform:quarkus-maven-plugin:2.9.2.Final:build (default) on project converter-service: Failed to build quarkus application: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
[ERROR] [error]: Build step io.quarkus.deployment.pkg.steps.NativeImageBuildStep#build threw an exception: io.quarkus.deployment.pkg.steps.NativeImageBuildStep$ImageGenerationFailureException: Image generation failed. Exit code: 1
[ERROR] at io.quarkus.deployment.pkg.steps.NativeImageBuildStep.imageGenerationFailed(NativeImageBuildStep.java:400)
[ERROR] at io.quarkus.deployment.pkg.steps.NativeImageBuildStep.build(NativeImageBuildStep.java:240)
[ERROR] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[ERROR] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
[ERROR] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[ERROR] at java.base/java.lang.reflect.Method.invoke(Method.java:568)
[ERROR] at io.quarkus.deployment.ExtensionLoader$3.execute(ExtensionLoader.java:925)
[ERROR] at io.quarkus.builder.BuildContext.run(BuildContext.java:277)
[ERROR] at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
[ERROR] at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2449)
[ERROR] at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1478)
[ERROR] at java.base/java.lang.Thread.run(Thread.java:833) …Run Code Online (Sandbox Code Playgroud) 我正在学习 GraalVM 和 AOT,我正在阅读AOT 的规范,然后我很困惑,如果 AOT 将我的代码编译为机器代码(本机),为什么我需要 JVM?
为什么我需要这个:
java -XX:AOTLibrary=./libHelloWorld.so HelloWorld
Run Code Online (Sandbox Code Playgroud)