jaotc编译后仍需要原始类文件?

时间:2018-06-13 17:54:58

标签: java jaotc

对于那些了解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文件?那么做AOT有什么意义呢?

2 个答案:

答案 0 :(得分:0)

是的,至少到目前为止。您可以参考http://openjdk.java.net/jeps/295

  

由于类字节码可以随时间变化,因此可以通过更改   源代码或通过类转换和重新定义,JVM   需要检测此类更改并拒绝AOT编译的代码,如果   字节码不匹配。这是通过类指纹实现的。   在AOT编译期间,将生成每个类的指纹,并   存储在共享库的data部分中。后来上课的时候   已加载并找到此类的AOT编译代码,   将当前字节码的指纹与存储在其中的指纹进行比较   共享库。如果不匹配,则该AOT代码   没有使用特定的类。

答案 1 :(得分:0)

当我发现在我的本机版本的Minecraft中唯一加载的Java本机映像是java.base中的一个时,我对此表示怀疑。我不知道为什么,直到我读了这篇文章。

如果可能的话,AOT图像只是替代图像。它们不能替代原始Java字节码。

仅当JVM参数不同和/或在不同平台上运行时,才执行此操作。我相信,如果您要制作Java本机应用程序,则IKVM.NET会更适合您的目的。