6
据JEP-295(http://openjdk.java.net/jeps/295)为什么在java.base一些方法不能被AOT编译器
有在java.base一些方法导致编译失败,但为什么编译?
可以理解,有人可以帮助我,以便我可以实现Openjdk AOT编译器的限制。
据JEP-295(http://openjdk.java.net/jeps/295)为什么在java.base一些方法不能被AOT编译器
有在java.base一些方法导致编译失败,但为什么编译?
可以理解,有人可以帮助我,以便我可以实现Openjdk AOT编译器的限制。
见documentation要链接到:
当前AOT限制......
可能无法编译它使用动态生成的类的字节码(lambda表达式,调用动态)的Java代码。
这些限制可能会在将来的版本中解决。
因此,两个潜在解释:
最有可能的“选项2”是更好的解释 - 再次看到你的链接。
它包含未能编译方法列表,与错误发生一起:
cat java.base-list.txt
# jaotc: java.lang.StackOverflowError
exclude sun.util.resources.LocaleNames.getContents()[[Ljava/lang/Object;
exclude sun.util.resources.TimeZoneNames.getContents()[[Ljava/lang/Object;
exclude sun.util.resources.cldr.LocaleNames.getContents()[[Ljava/lang/Object;
exclude sun.util.resources..*.LocaleNames_.*.getContents\(\)\[\[Ljava/lang/Object;
exclude sun.util.resources..*.LocaleNames_.*_.*.getContents\(\)\[\[Ljava/lang/Object;
exclude sun.util.resources..*.TimeZoneNames_.*.getContents\(\)\[\[Ljava/lang/Object;
exclude sun.util.resources..*.TimeZoneNames_.*_.*.getContents\(\)\[\[Ljava/lang/Object;
# java.lang.Error: Trampoline must not be defined by the bootstrap classloader
exclude sun.reflect.misc.Trampoline.<clinit>()V
exclude sun.reflect.misc.Trampoline.invoke(Ljava/lang/reflect/Method;Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;
# JVM asserts
exclude com.sun.crypto.provider.AESWrapCipher.engineUnwrap([BLjava/lang/String;I)Ljava/security/Key;
exclude sun.security.ssl.*
exclude sun.net.RegisteredDomain.<clinit>()V
# Huge methods
exclude jdk.internal.module.SystemModules.descriptors()[Ljava/lang/module/ModuleDescriptor;
当你检查源,例如getContents() - 没有lambda表达式存在。
所以未能编译方法是最有可能所造成的事实,即新的编译器是“不尚未准备”成功编译任意 Java源代码!
我非常感谢您的帮助。谢谢! – cwei