2011-10-29 30 views
5

Tôi đã sử dụng javap để nghiên cứu mã sản xuất cho một trong các lớp học của tôi và nhận thấy kết quả như sau:mục "giả" trong đầu ra javap bảng địa phương

... 
frame_type = 255 /* full_frame */ 
    offset_delta = 11 
    locals = [ class Test, double, int, double, double, bogus, bogus, int, int, class "[D" ] 
    stack = [] 
... 

ý nghĩa của những loại "không có thật" là gì/các mục nhập biến trong bảng locals? Chúng gây ra như thế nào? Tác động của chúng đối với mã kết quả là gì?

Tệp lớp được tạo bằng trình biên dịch Eclipse 3.7 và javap đến từ OpenJDK-1.6b22.

+0

bạn có thể chia sẻ nguồn gốc của phương pháp này? Và có lẽ cũng là bytecode? Đoán của tôi sẽ là nó đến từ foreach, switch (enum), hoặc một trong những tính năng khác yêu cầu mã được autogenerated bởi trình biên dịch. –

Trả lời

2

tôi đến khi this little gem khi đi qua các tài liệu hướng dẫn Javassist:

giả

public static Loại thức giả

Đại diện cho một giá trị không thể truy cập. Mã không thể truy cập vào giá trị này loại đại diện. Nó xảy ra khi bytecode reuses một bảng biến cục bộ vị trí với các loại không hợp nhất. Một ví dụ sẽ được biên dịch mã sử dụng cùng một vị trí cho loại nguyên thủy trong một chi nhánh và loại tham chiếu trong một chi nhánh khác.

Tôi đoán rằng sự nhập nhằng này là nguyên nhân gây ra các mục "giả" trong bảng locals cũng ...

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