对于那些了解jaotc的人,我有一个简单的问题要问你。
在此之后
javac HelloWorld.java
jaotc --output HelloWorld.so HelloWorld.class你可以运行
java -XX:AOTLibrary=./HelloWorld.so HelloWorld没有任何问题。这是互联网上随处可见的。我没意见。
但是,如果将HelloWorld.class移动到不在类路径中的其他位置,并运行
java -XX:AOTLibrary=./HelloWorld.so HelloWorld再一次,你会得到一个class not found错误。
所以仍然需要原始的.class文件?那么做AOT有什么意义呢?
发布于 2018-07-25 10:33:15
是的,至少到目前为止。你可以参考http://openjdk.java.net/jeps/295:
由于类字节码可能会随着时间的推移而发生变化,无论是通过更改源代码还是通过类转换和重新定义,
都需要检测这种更改,并在字节码不匹配时拒绝使用AOT编译的代码。这是通过类指纹识别实现的。在AOT编译期间,将生成每个类的指纹,并将其存储在共享库的数据部分中。稍后,当加载一个类并找到该类的AOT编译代码时,会将当前字节码的指纹与存储在共享库中的指纹进行比较。如果存在不匹配,则不使用该特定类的aot码。
发布于 2019-08-25 16:58:00
当我发现我的本机版本“我的世界”中唯一加载的Java Native Image是java.base的时候,我怀疑这一点。我不知道为什么,直到我读到这篇文章。
如果可能的话,AOT图像只是可供选择的图像。它们不是原始Java字节码的替代品。
这样做只是为了防止JVM参数不同和/或在不同的平台上运行。我相信,如果您正在尝试创建一个Java Native应用程序,IKVM.NET更适合您的目的。
https://stackoverflow.com/questions/50843428
复制相似问题