相关疑难解决方法(0)

什么是引导方法?

我一直在阅读关于java8 lambdas实现的演示文稿http://fr.slideshare.net/czechscala/java-8-under-the-hood

LambdaMetaFactory包含用于将lambda表达式转换为功能接口对象的引导方法.

这些bootstrap methods是什么,它们是否相关invokedynamic

java

11
推荐指数
2
解决办法
2351
查看次数

java JVM 字节码表示法,注释语法。调用动态

问题:第14行是什么意思?

使用 javap -v -c 反汇编以下代码:

 public class test {
     static int i = 2;
     public static void main(String[] args) {
         test x = new test();
         System.out.println("text + String: " + i);
     } 
 }
Run Code Online (Sandbox Code Playgroud)

在主函数中,我们得到以下内容:

14: invokedynamic #20,  0             // InvokeDynamic #0:makeConcatWithConstants:(I)Ljava/lang/String;
19: invokevirtual #24                 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
...
BootstrapMethods:
  0: #38 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:
      #44 text + String: \u0001
Run Code Online (Sandbox Code Playgroud)

因此,例如,第 19 行表示来自运行时常量池中 #24 项的 invokevirtual 函数。调用的方法println()来自于类java/io/PrintStream,其输入来自于类Ljava/lang/String,其返回值为 Void。

至于第 14 行,#0 持有对 BootstrapMethod …

java jvm javap jvm-bytecode

4
推荐指数
1
解决办法
145
查看次数

标签 统计

java ×2

javap ×1

jvm ×1

jvm-bytecode ×1