UseMembar 계속하기 전에 완료하는 모든 메모리 작업을 강제로 엄격한 방식은 membar 지침을 사용할지 여부를 결정합니다.
기본적으로 프로세서의 지연된 메모리 처리가 중지되어 코드가 엉망이되어 최적화가 처리됩니다.
이렇게하면 대개 속도가 느려지므로 대다수 코드의 경우 최신 VM에서는 필요하지 않습니다.
때때로 코드는 스레드 안전성이 있어야하지만 membar 명령 사용이 부족하기 때문에 발생하지 않는 문제가 발생합니다. 이 경우이 코드를 켜면 단일 스레드로 전환하거나 문제를 방지하기 위해 코드의 순서를 바꾸는 일없이 해당 코드를 사용할 수 있습니다.
JVM은 일반적으로 membar를 삽입하거나 JIT 코드 재 배열 최적화를 수행하여 메모리 조작이 완료 될 때까지 시간을 제공합니다. 사실, 주제에 대한 웹 검색에서 나는 단지 버그의 한 예를 발견했으며 오라클과 OpenJRE 버전의 핫스팟 JVM의 최신 버전에서 수정되었습니다.
참고로 ARM 아키텍처의 경우 대체 최적화 (psuedo membar 최적화라고 함)가 아직 적용되지 않았으므로이 옵션은 여전히 on으로 설정되어 있으므로 membar 명령 없이는 매우 버그가있을 수 있습니다.
BTW : -XX 옵션은 공식적으로 지원되지 않으며 향후 릴리스에서 알림없이 제거 할 수 있습니다. –
@Rastislav 사실이지만, 많은 경우에 당신은 그것들을 사용할 필요가 있습니다 ... –