2017-07-28 88 views

回答

5

documentation要链接到:

当前AOT限制......

可能无法编译它使用动态生成的类的字节码(lambda表达式,调用动态)的Java代码。

这些限制可能会在将来的版本中解决。

因此,两个潜在解释:

  1. 不编译落入已知限制
  2. 否则的方法,在一个“全新的,实验性的”产品中的错误

最有可能的“选项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源代码!

+0

我非常感谢您的帮助。谢谢! – cwei

相关问题