@foonfyrick

@Volatile, кэшировние?

Я не до конца понимаю что значит кэширование и как работает @Volatile, я знаю что при использовании аннотации volatile к переменной, значение переменной считывается по ссылке к этой переменной из разных потоков, а не из кэша потоков, но я не совсем понимаю что за кэш, где он и как отследить что значение закешировалось. Ощущение у меня, что вопрос очень глупый, но оставить его не решенным - не могу :(
Простыми словами пожалуйста объясните.
  • Вопрос задан
  • 471 просмотр
Решения вопроса 1
Erik_Mironov
@Erik_Mironov
Старые вопросы: *Dies from cringe*
CPU имеют кэши разного уровня L1, L2, L3. Каждый поток(а также ядро процессора) имеет собственный кэш. Эти кэши хранят минимальный набор оперативной памяти для обеспечения производительности. Если переменная определена как volatile, то все операции записи над ней сразу же отражаются в памяти и не кэшируются. У потоков нет локальной копии памяти и часть данных которую поток читает / записывает может быть из кэша, а не из основной памяти, а поэтому когда один поток изменяет какую-либо переменную, то другой поток не может увидеть изменения над ней. Грубо говоря, для таких случаев и нужен volatile. Фух, объяснил как мог, возможно кто-то объяснит более подробно.

5fec4c344c127654024248.png

Можете почитать про модель памяти в Java
https://docs.oracle.com/javase/specs/jls/se7/html/...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы