Tôi thấy điều này trong thông số kỹ thuật java:java sắp xếp lại và mô hình bộ nhớ
Nếu x và y là hành động của cùng một chuỗi và x đến trước y theo thứ tự chương trình, x xảy ra trước y.
và cũng
mã ban đầu
Chủ đề 1
r2 = A này;
B = 1;
chuyển đổi trình biên dịch hợp lệ (trình biên dịch được phép sắp xếp lại các hướng dẫn trong một trong hai chủ đề, khi điều này không ảnh hưởng đến việc thực hiện các chủ đề mà trong sự cô lập)
Chủ đề 1
B = 1;
r2 = A;
Tôi bối rối với hai điều đó.
nếu một hành động x đến trước một hành động y thì x sẽ xảy ra trước y. nếu chúng ta xem xét r2 = A cho x và B = 1 cho y, r2 = A sẽ xảy ra trước B = 1. Làm thế nào có thể có bất kỳ sắp xếp lại, làm thế nào đến B = 1 được thực hiện trước khi r2 = A nếu x xảy ra trước khi y là đúng ?.
Dựa trên những gì JLS nói: JIT quyết định rằng * Xảy ra trước * không cần thiết nếu không có sự phụ thuộc giữa hai sự kiện (nếu chúng độc lập) phải không ?. Đoạn này hướng đến tối ưu hóa JIT chính xác? – TheLostMind
@ TheLostMind: Vâng, hoặc tối ưu hóa JIT hoặc chỉ JIT không * loại bỏ * Tối ưu hóa CPU –
Trong trường hợp đó, * cuối cùng *, a * xảy ra trước * không tồn tại. Tôi ngửi thấy mùi của * phân tích thoát * trong cái này: P – TheLostMind