我了解了GraalVM和SubstrateVM框架。据我了解,该native-image
命令可用于从 Java 源文件创建本机应用程序,如下所示:
$ javac Hello.java
$ native-image --no-server --no-fallback Hello
$ ./hello
Hello World!
$
Run Code Online (Sandbox Code Playgroud)
这将创建一个本机二进制文件hello
,根据这个问题,它由 SubstrateVM 框架提供支持,该框架提供了...
...在没有 JVM 的情况下实际运行提前编译的 Java 字节码所需的其他东西(运行时)。
我不清楚:
hello
由纯目标机字节码组成,还是仍然有 Java 字节码和嵌入的成熟虚拟机(即 SubstrateVM)?hello
相比,运行本机映像需要哪些开销?Hello World!
GraalVM native-image 允许我们将 Java 库转换为本地可执行文件。它还允许编译为提到的共享库https://www.graalvm.org/docs/Native-Image/user/README
本机映像可以构建为独立的可执行文件,这是默认设置,也可以通过将 --shared 传递给 native-image 来构建为共享库。要使图像有用,它需要至少有一个入口点方法。
我找到的最接近的线程是https://github.com/oracle/graal/issues/373,但仍然找不到任何适用于 iOS 的指南,这可能吗?我可以遵循任何指南吗?
我有一个研究项目(在 Java 8 中实现),在 Eclipse 中包含几个类、几个主要函数和超过 10000 行代码。当输入不小时,程序就会内存不足。
我想看看如果编译为本机应用程序,它是否会使用更少的堆栈内存。
我没有找到在 Eclipse 中执行此操作的方法。
我做到了,
$GRAALVM_HOME/bin/javac /home/appu/Downloads/2019/June/20/HelloWorld.java
它有效。我得到了一个可以工作的二进制文件。
我尝试了
/home/appu/Downloads/Apps/GraalVM/2019-06-20/graalvm-ee-19.0.2/bin/native-image /home/appu/eclipse-nimi/NimishaGraalEE19/bin/nimi/decimate/Decimate.class
我得到Main entry point class '/home/appu/eclipse-nimi/NimishaGraalEE19/bin/nimi/decimate/Decimate.class' not found.
我尝试了
/home/appu/Downloads/Apps/GraalVM/2019-06-20/graalvm-ee-19.0.2/bin/native-image /home/appu/eclipse-nimi/NimishaGraalEE19/bin/*
我得到Main entry point class '/home/appu/eclipse-nimi/NimishaGraalEE19/bin/nimi' not found.
经典
public class HelloWorld
{
public static void main(String[] args)
{
System.out.println("Hello, World!");
}
}
Run Code Online (Sandbox Code Playgroud)
被编译成“HelloWorld.class”
它给出了一个可执行文件“helloworld”,它是可执行的(application/x-executable)。
我可以从 Eclipse 得到同样的东西吗?对于多类文件,我可以从命令行获得相同的结果吗?
当我将上面的代码更改为
public class HelloWorld
{
public static void hello()
{
System.out.println("Hello, World!");
}
}
Run Code Online (Sandbox Code Playgroud)
并添加另一个类
public class Main
{
public static void …
Run Code Online (Sandbox Code Playgroud) 我想知道为什么 Java 应用程序的 GraalVM (SubstrateVM) 本机映像使其运行时运行时行为将消耗更少的内存,但如果正常运行,它将消耗更多的内存?
为什么普通的 JIT 不能同样消耗少量内存?
我如何以假验证模式运行Substrate以用于开发目的(是否有类似于--dev
在geth中立即挖掘交易的东西)?
substratevm ×5
graalvm ×4
java ×2
jvm ×2
blockchain ×1
eclipse ×1
ios ×1
parity ×1
parity-io ×1
substrate ×1