标签: graalvm

GraalVM:主机环境不允许访问本机代码

我刚刚设置了一个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)

graalvm

4
推荐指数
1
解决办法
577
查看次数

IllegalStateException:在类路径上找不到语言和多语言实现。确保 truffle-api.jar 位于类路径上

IllegalStateException: No language and polyglot implementation was found on the
classpath. Make sure the truffle-api.jar is on the classpath.
Run Code Online (Sandbox Code Playgroud)

我想在我的 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 java-11

4
推荐指数
1
解决办法
5637
查看次数

为什么 GraalVM (SubstrateVM) 本机映像在运行时使用的内存比相应的 JIT 构建少得多?

我想知道为什么 Java 应用程序的 GraalVM (SubstrateVM) 本机映像使其运行时运行时行为将消耗更少的内存,但如果正常运行,它将消耗更多的内存?

为什么普通的 JIT 不能同样消耗少量内存?

jvm graalvm substratevm graalvm-native-image

4
推荐指数
1
解决办法
3976
查看次数

GraalVM 性能

我们正在为我们的堆栈评估 GraalVM。主要考虑因素之一是性能,这里有一些基准: https: //renaissance.dev/

问题是我们希望看到其他语言实现的基准,而不是 OpenJDK 和 GraalVM 版本之间的基准。我唯一能找到的就是这篇文章,将它与 C2 进行比较。https://medium.com/graalvm/graalvm-20-1-7ce7e89f066b

我们的谷歌搜索没有发现任何其他结果。

我们在哪里可以找到更广泛的、跨语言的 GraalVM 基准测试?

java benchmarking microbenchmark graalvm

3
推荐指数
1
解决办法
2855
查看次数

在 Mac 上安装/运行 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\\垃圾箱在我的道路上。

\n

之后,我访问https://code.quarkus.io/并上传了一个Hello World要使用 gradle 构建的 Quarkus 项目(6.8)。

\n

当我运行时,gardle build一切都构建正常。\n当我运行时,gradle quarkusDev应用程序启动正常,我可以到达Hello World终点。

\n

但是,当我尝试构建本机映像时,gradle build -Dquarkus.package.type=native出现以下异常

\n
java.lang.RuntimeException: Cannot find the `native-image` in the GRAALVM_HOME, JAVA_HOME and System PATH. Install it using `gu install native-image`\n
Run Code Online (Sandbox Code Playgroud)\n

gu install native-image …

graalvm quarkus graalvm-native-image

3
推荐指数
1
解决办法
2319
查看次数

Apache Ant 与 Graal VM

我们将 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)

nashorn graalvm java-11

3
推荐指数
1
解决办法
2360
查看次数

Quarkus 原生镜像构建失败

我正在尝试在 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)
  1. 在我的 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目录的内容]

  • com_abc_demo_xyz-1.0-SNAPSHOT-native-image-source-jar
  • com_abc_demo_xyz-1.0-SNAPSHOT-runner
  • com_abc_demo_xyz-1.0-SNAPSHOT.jar
  • 故障安全报告
  • 生成源
  • Maven 归档器
  • 行家状态
  • quarkus 应用程序
  • quarkus-artifact.properties

[测试环境]

  • Java 版本 11.0.6
  • Docker 桌面版 4.1.1
  • macOS 蒙特利
  • Maven 3.8.3
  • GraalVM:graalvm-ce-java11-21.3.0 …

java graalvm quarkus

3
推荐指数
1
解决办法
3657
查看次数

如何关联JIB和GraalVM

介绍

我目前正在开发一个 GitHub CI,它可以使用 JIB buildpack 自动构建容器。

我想知道是否可以结合 JIB 和 GraalVM 来构建本机解决方案?

CI 的代码:

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 jib github-actions graalvm-native-image

3
推荐指数
1
解决办法
2574
查看次数

Quarkus Native 镜像构建抛出错误:镜像生成失败

我正在尝试使用 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)

java maven graalvm quarkus graalvm-native-image

3
推荐指数
1
解决办法
5996
查看次数

为什么需要 JVM 来运行 AOT 编译的代码?

我正在学习 GraalVM 和 AOT,我正在阅读AOT 的规范,然后我很困惑,如果 AOT 将我的代码编译为机器代码(本机),为什么我需要 JVM?
为什么我需要这个:

java -XX:AOTLibrary=./libHelloWorld.so HelloWorld
Run Code Online (Sandbox Code Playgroud)

java graalvm jaotc

3
推荐指数
1
解决办法
136
查看次数