Bất cứ ai có thể giải thích cách các nguồn Java giống hệt nhau có thể kết thúc biên dịch sang nhị phân các tệp lớp khác nhau không?Các nguồn Java giống hệt nhau được biên dịch thành các lớp nhị phân khác nhau
Câu hỏi đặt ra từ các tình huống sau đây:
Chúng tôi có một ứng dụng khá lớn (800 lớp) mà đã được phân nhánh, tái cơ cấu sau đó reintegrated trở lại vào thân cây. Trước khi tái hòa nhập, chúng tôi sáp nhập thân cây vào chi nhánh, đó là thủ tục tiêu chuẩn.
Kết quả cuối cùng là một tập hợp các thư mục với các nguồn chi nhánh và một tập hợp các thư mục với các nguồn trunk. Sử dụng Beyond Compare, chúng tôi đã có thể xác định rằng cả hai bộ nguồn đều giống hệt nhau. Tuy nhiên, khi biên dịch (cùng một JDK bằng cách sử dụng maven được lưu trữ trong IntelliJ v11), chúng tôi nhận thấy rằng khoảng một tá tệp lớp học khác nhau.
Khi chúng tôi giải mã nguồn cho từng cặp tệp lớp khác nhau, chúng tôi đã kết thúc bằng cùng một nguồn java, do đó, về mặt kết quả cuối cùng, điều đó dường như không quan trọng. Nhưng tại sao nó chỉ là một vài trong số các tập tin khác nhau?
Cảm ơn.
suy nghĩ khác:
Nếu maven/javac biên dịch tập tin trong một chuỗi khác nhau, có thể có ảnh hưởng đến kết quả cuối cùng?
các phiên bản jdk khác nhau? Tôi tưởng tượng các tối ưu hóa có thể khác nhau cho các phiên bản khác nhau. – RNJ
Sử dụng javap -c -v (cảm ơn Peter Lawrey) và xem các kết quả đầu ra tương ứng bằng cách sử dụng Beyond Compare (công cụ tuyệt vời, thích nó!) Tôi có thể xác nhận mục 5 trên câu trả lời của Stephen C (cảm ơn Stephen C) cho một phần câu trả lời ở đây. Trong một số trường hợp, thứ tự hồ bơi không đổi là khác nhau. Tuy nhiên, tôi khá chắc chắn classpath là như nhau cho cả hai, nhưng thứ tự biên dịch có thể khác nhau. – Vicki