2011-09-02 28 views
12

Hiện tại tôi chỉ đang ở trong một dự án sử dụng bytecode java. Tôi thường thấy rằng khi tạo một thể hiện lớp mới và gọi một phương thức trên nó, bytecode sẽ giống như:Tại sao DUP khi tạo cá thể mới

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

Tại sao nên làm "DUP"? Từ VM Spec, tôi nhận được mô tả "Nhân đôi giá trị trên cùng của chồng toán hạng và đẩy giá trị trùng lặp lên ngăn xếp hạng". Nhưng tại sao phải sao chép giá trị trên cùng trên toán hạng là cần thiết ở đây? Cảm ơn.

Trả lời

19

Vì INVOKESPECIAL sẽ tiêu thụ giá trị được tạo bởi MỚI từ ngăn xếp hạng, nhưng bạn có thể cần phải thực sự sử dụng giá trị này, vì vậy tham chiếu được nhân bản trước.

Các vấn đề liên quan