2016-03-23 13 views
0

Ich bin dabei blog zu studieren Java zu Bytecode & Ich habe Bytecode für diese SimpleClass generiert.Verständnis Bytecode für eine einfache Java-Klasse generiert

public class SimpleClass { 

    public int simpleF = 5; 


} 

Ich verstehe die Bytecode-Positionen wie unten

  • 0 ist für 'this'
  • 1 ist der Konstruktor von Super Objekt für den Aufruf.
  • 4 -?
  • 5 für Wert 5
  • 6 Pop von Stapel und zuweisen 5 bis Variable.

Aber ich verstehe nicht aload_0 an Position 4 und seinen Zweck?

// 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

kann ich nur empfehlen, die JVM-Spezifikation nachschlagen, wo jeder Opcode eine zu einer Seite erklärt:

Weitere Informationen finden Sie in diesem Artikel. Zu breit, um hier zu antworten. – EJP

Antwort

1

aload_0 ist es in dem Stapel die Referenz die aktuelle Klasse in der Erklärung zu drücken, die die lokale nichtstatischen Feld simpleF bis 5.

[this.]simpleF=5 

Von http://cs.au.dk/~mis/dOvs/jvmspec/ref-putfield.html

gesetzt

putfield legt den Wert des Feldes fest, das durch <field-spec> inidentifiziert wirdobjectref (ein Verweis auf ein Objekt) auf den Einzel- oder Doppelwort-Wert auf dem Operandenstapel.

0

Für den JVM es fast alles ausführen muß die Dinge in den Ausführungsstapel schiebt, wird aload_0 verwendet, um ein Objekt aus dem lokalen Variablen Array (Position 0) zu dem Ausführungsstapel zu laden, zum Beispiel Methoden Position 0 bezieht sich immer Dies ist eine Referenz auf das aktuelle Objekt. http://blog.jamesdbloom.com/JavaCodeToByteCode_PartOne.html

Verwandte Themen