2011-09-02 17 views
12

Obecnie jestem tylko w projekcie, który używa kodu bajtowego Java. I zazwyczaj zobaczyć, że podczas tworzenia nowej instancji klasy i wywołać metodę na nim, Kod bajtowy będzie jak:Dlaczego DUP podczas tworzenia nowej instancji

NEW <MyClass> 
DUP 
INVOKESPECIAL <MyClass.<init>> 

Oto dlaczego należy zrobić „DUP”? Z VM Spec, otrzymuję opis "Duplikuj najwyższą wartość na stosie argumentów i wypychaj powieloną wartość na stos argumentów". Ale dlaczego powielanie najwyższej wartości na stosie argumentów jest tutaj potrzebne? Dzięki.

Odpowiedz

19

Ponieważ INVOKESPECIAL pochłonie wartość utworzoną przez NEW ze stosu operandów, ale może być konieczne użycie tej wartości, więc referencja jest powielana z góry.

Powiązane problemy