编译器asm字节码

时间:2013-06-09 01:27:54

标签: java assembly compiler-construction jvm bytecode

我想看看这段代码的字节码

if (3 < 5) {

}

使用javap -c。但由于某种原因,它没有显示步骤。 e.x int a;工作正常。

如何在字节码中看到这个想法?

3 个答案:

答案 0 :(得分:1)

编译器并不像你想象的那么愚蠢。您尝试在字节代码中看到的块是:

  1. 永远是真的
  2. 这意味着编译器将完全从字节代码中删除它。

    尝试以下方法:

        int a = 3;
        if(a < 5)
        {
            a = 3 + 5;
        }
    

    您将在字节代码中获得以下汇编指令:

       0: iconst_3      
       1: istore_1      
       2: iload_1       
       3: iconst_5      
       4: if_icmpge     10
       7: bipush        8
       9: istore_1      
      10: return 
    

答案 1 :(得分:0)

  

javap -c :为每个指定类中的每个方法打印Java虚拟机指令。此选项可以反汇编   所有方法,包括私有方法。

由于您的块中没有任何内容,并且条件始终为真,您可能看不到字节代码。

答案 2 :(得分:0)

如果你想知道,如果它没有完全优化就会生成的字节码就像是

iconst_3
iconst_5
if_icmpge (offset)