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