UseMembar xác định có hay không sử dụng hướng dẫn membar một cách nghiêm ngặt, buộc tất cả các hành động bộ nhớ để hoàn thành trước khi tiếp tục.
Về cơ bản, việc dừng tối ưu hóa xử lý bộ nhớ bị trì hoãn của bộ vi xử lý từ việc rối tung với mã được xử lý.
Điều này thường làm chậm mọi thứ và không cần thiết trên các máy ảo hiện đại cho phần lớn mã.
Thỉnh thoảng bạn gặp phải các vấn đề trong đó mã NÊN được an toàn chỉ nhưng không phải vì thiếu sử dụng lệnh ghi nhớ. Trong những trường hợp này, bạn có thể bật tính năng này để nhận mã như vậy để hoạt động mà không cần phải chuyển sang luồng đơn hoặc làm rối tung xung quanh với thứ tự mã để ngăn chặn sự cố.
JVM thường phát hiện mã sẽ gây ra sự cố và chèn một thanh ghi hoặc thực hiện mã JIT sắp xếp lại tối ưu để cung cấp thời gian cho thao tác bộ nhớ hoàn tất. Trong thực tế, trong tìm kiếm trên web của tôi về chủ đề này, tôi chỉ tìm thấy một ví dụ về lỗi và nó đã được sửa trong các phiên bản gần đây của cả hai phiên bản Oracle và OpenJRE của JVM hotspot. Một lưu ý, đối với kiến trúc ARM, tùy chọn này vẫn mặc định bật, vì tối ưu hóa thay thế (được gọi là tối ưu hóa psuedo-membar) chưa được áp dụng, và do đó nó có thể rất lỗi mà không có hướng dẫn của membar.
Nguồn
2015-12-26 23:47:21
BTW: -XX tùy chọn không được hỗ trợ chính thức và có thể bị xóa khỏi các bản phát hành trong tương lai mà không cần thông báo. –
@Rastislav đúng, nhưng trong nhiều trường hợp, bạn cần phải sử dụng chúng ... –