2016-03-23 27 views
0

我正在关注此blog以研究java到字节码&我已经为此SimpleClass生成了字节码。了解为简单Java类生成的字节码

public class SimpleClass { 

    public int simpleF = 5; 


} 

我理解的字节码位置如下

  • 0为 '这个'
  • 1是用于调用超 对象的构造。
  • 4 - ?
  • 5代表5
  • 6从堆栈中弹出并将5分配给 变量。

但我不明白aload_0在位置4及其目的?

// Compiled from SimpleClass.java (version 1.6 : 50.0, super bit) 
public class SimpleClass { 

    // Field descriptor #6 I 
    public int simpleF; 

    // Method descriptor #8()V 
    // Stack: 2, Locals: 1 
    public SimpleClass(); 
    0 aload_0 [this] 
    1 invokespecial java.lang.Object() [10] 
    4 aload_0 [this] 
    5 iconst_5 
    6 putfield SimpleClass.simpleF : int [12] 
    9 return 
     Line numbers: 
     [pc: 0, line: 2] 
     [pc: 4, line: 4] 
     [pc: 9, line: 2] 
     Local variable table: 
     [pc: 0, pc: 10] local: this index: 0 type: SimpleClass 
} 
+0

我只能建议你查查JVM规范,每一个操作码解释一个页面。在这里回答太宽泛。 – EJP

回答

0

对于JVM来执行几乎任何事情,它必须将东西推入执行堆栈,aload_0用于从局部变量数组(位置0)向执行堆栈中加载对象,例如方法位置0始终引用这是对当前对象的引用。

的更多信息可以在这篇文章中找到: http://blog.jamesdbloom.com/JavaCodeToByteCode_PartOne.html