Что это на самом деле означает, говоря, заказал раньше? Потому что даже если действие_а происходит до действия_b, действие_а может быть выполнено после действия_b в какой-то реализации, верно?
Отношение Происходит до создает барьер памяти, который предотвращает выполнение действия-b до действия-a. Таким образом, некоторые базовые оптимизации JVM не могут применяться. Итак, NO действие-a не может выполняться после или вместе с действием-b.
Если action_a происходит до action_b, означает ли это, что action_a НЕ ДОЛЖЕН видеть action_b? Или action_a может видеть или не видеть action_b?
Это означает, что действие-б должно видеть все изменения, внесенные действием-а.
Если action_a НЕ происходит до action_b, а action_b НЕ происходит до action_a, означает ли это, что action_a может видеть или не видеть action_b?
Происходит до — это транзитивное отношение. Таким образом, если действие-а происходит до действия-б, которое происходит до действия-с... так что до действия-у, а действие-у происходит до действия-z, то действие-а происходит до действия-z.
Отношение «происходит до» гарантирует, что действия, которые следуют за текущим действием, увидят изменения, сделанные текущим действием. Если изменения не видны, то происходит раньше не существует.
Раньше не могло быть никаких циклических событий, верно?
Верно, если действие-а происходит до действия-б, действия-с, действия-d, то ни одно из действий b, c, d не может произойти до действия-а.
Изменить:
JLS говорит: Следует отметить, что наличие отношения «происходит до» между двумя действиями не обязательно означает, что они должны выполняться в этом порядке в реализации. Если изменение порядка приводит к результатам, согласующимся с законным исполнением, оно не является незаконным.. Таким образом, если действие-а имеет отношение происходит до с действием-б, то действие-б может выполняться первым при условии, что финал эквивалентен состоянию, если действие а было выполнено до действия б. Это зависит от реализации. JIT может решить запустить действие-b раньше, чем действие a, при условии, что это изменение порядка не повлияет на конечный результат.
Итак, действие-а независимо от действия-б. по крайней мере теоретически :)
Происходит до определяет последовательные действия. Если действия параллельны, то событие "происходит до" не существует.
Примечание. Вся эта путаница возникает из-за того, что JIT удаляет происходит раньше, если нет зависимости между двумя действиями. Прочтите об анализе побегов.
person
TheLostMind
schedule
24.12.2014