繁体   English   中英

java javap和groovy字节码比较

[英]java javap and groovy bytecode comparison

这是javap在我要求他显示我编译的类时生成的代码(我选择的方法)

int multiply(int, int);
  flags:
  Code:
    stack=2, locals=3, args_size=3
       0: iload_1
       1: iload_2
       2: imul
       3: ireturn
    LineNumberTable:
      line 2: 0
    LocalVariableTable:
      Start  Length  Slot  Name   Signature
             0       4     0  this   LMyClass;
             0       4     1     a   I
             0       4     2     b   I

这是代码,由groovyConsole显示(相同方法)

public multiply(II)I
   L0
    LINENUMBER 4 L0
    ILOAD 1
    ILOAD 2
    IMUL
    IRETURN
   L1
    LDC 0
    IRETURN
    LOCALVARIABLE this LMyClass; L0 L1 0
    LOCALVARIABLE a I L0 L1 1
    LOCALVARIABLE b I L0 L1 2
    MAXSTACK = 2
    MAXLOCALS = 3

但哪个字节码更raw 据我所知, javap为它添加了一些样式,所以第二个例子应该是更真实的bytecode 我对吗?

这些都不是更原始的。 只有两种不同的方式来呈现完全相同的信息。

看起来Javap和Groovy都做了一些糖,但是以不同的方式,所以你不能说一个比另一个更“原始”。 例如,Groovy显示Javap糖的原始方法描述符(II)I ,而Javap显示堆栈和本地计数,而Groovy则不显示。

话虽这么说,但两者都不是特别“原始”。 Javap旨在帮助Java调试,所以它试图隐藏或重写一些东西,以使输出更像Java。 它的设计目的不是处理异常或恶意构造的类文件。

如果您想要最“原始”的反汇编输出,您最好的选择是Krakatau反汇编程序 Krakatau是唯一可以表示任意类文件中每个小细节的反汇编程序,包括非java和恶意构造的类文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM