java为什么不aot_为什么java.base中的某些方法无法由AOT编译器编译

Current AOT limitations ...

May not compile java code which uses dynamically generated classes and bytecode (lambda expressions, invoke dynamic).

These limitations may be addressed in future releases.

因此有两种可能的解释:

不编译的方法属于已知限制

否则,“全新的,实验性的”产品中的错误

最有可能“选项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.()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.()V

# Huge methods

exclude jdk.internal.module.SystemModules.descriptors()[Ljava/lang/module/ModuleDescriptor;当你检查来源时,例如getContents() - 那里没有lambdas。

因此,编译失败的方法很可能是因为新编译器“尚未准备好”成功编译任意Java源代码!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值