UseMembar określa, czy używać membar instrukcjami w ścisły sposób, zmuszając wszystkie działania pamięci, aby zakończyć przed kontynuowaniem.
Zasadniczo zatrzymuje opóźnione procesorowe optymalizacje obsługi pamięci od manipulowania z kodem.
Powoduje to spowolnienie działania i nie jest konieczne na nowoczesnych maszynach wirtualnych w przypadku większości kodów.
Od czasu do czasu pojawiają się problemy, w których kod powinien być bezpieczny dla wątków, ale nie jest z powodu braku instrukcji użycia memba. W takich przypadkach można włączyć tę opcję, aby taki kod działał bez przełączania się na pojedyncze wątki lub zakłócanie porządku kodu, aby zapobiec problemowi.
JVM jest na ogół dobra w wykrywaniu kodu, który może powodować problemy i albo wstawić blok membranżowy, albo zmienić kod JIT w celu zapewnienia czasu na zakończenie operacji pamięciowych. W rzeczywistości, w moim wyszukiwaniu w sieci na ten temat, znalazłem tylko jeden przykład błędu i został on naprawiony w najnowszych wersjach zarówno wersji Oracle, jak i OpenJRE hotspotu JVM.
Uwaga: w przypadku architektur ARM opcja ta jest domyślnie włączona, ponieważ alternatywne optymalizacje (znane jako optymalizacje psuedo-membar) nie zostały jeszcze zastosowane, a zatem mogą być bardzo błędne bez instrukcji dotyczących memów.
BTW: -XX opcje nie są oficjalnie obsługiwane i mogą zostać usunięte z przyszłych wydań bez powiadomienia. –
@Rastislav prawda, ale w wielu przypadkach trzeba z nich korzystać ... –