gpt4 book ai didi

java - 什么是引导方法参数 - Java 字节码

转载 作者:行者123 更新时间:2023-12-02 02:05:42 25 4
gpt4 key购买 nike

具有 3 个方法参数的引导方法:

SourceFile: "Class.java"
BootstrapMethods:
0: #883 REF_invokeStatic java/lang/invoke/LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
Method arguments:
#884 ()Ljava/lang/Object;
#885 REF_invokeVirtual java/lang/Module.getClassLoader:()Ljava/lang/ClassLoader;
#886 ()Ljava/lang/ClassLoader;

带有单个参数的引导方法:

BootstrapMethods:
0: #284 REF_invokeStatic java/lang/invoke/StringConcatFactory.makeConcatWithConstants:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite;
Method arguments:
#285 \u0001\u0001
1: #284 REF_invokeStatic java/lang/invoke/StringConcatFactory.makeConcatWithConstants:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite;
Method arguments:
#290 \u0001 is not a \u0001

我已经开始研究 Java 字节码并想知道:

  • 引导方法参数到底是什么?
  • 第一个实例的第二个参数似乎引用了 lambda 表达式。那是什么?

注意:这不是关于如何确定一个对象是 lambda 的问题。我只想了解什么是引导方法参数,以及它与 lambda 表达式的相关性,只需检查字节码即可。

最佳答案

Bootstrap methods习惯 resolve invokedynamic说明。

invokedynamic 是一种通用机制,不仅适用于 lambda,因此引导方法绝对有可能具有任意数量的参数,其含义取决于所调用的方法(请参阅上面的链接)。

invokedynamic 也用于编译 lambda 表达式。在这种情况下,指令通常指的是 LambdaMetafactory.metafactoryLambdaMetafactory.altMetafactory作为引导方法。这些引导方法的参数在 Javadoc 中描述。 .

关于java - 什么是引导方法参数 - Java 字节码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50831654/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com