@foonfyrick

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

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

5fec4c344c127654024248.png

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

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

Войти через центр авторизации
Похожие вопросы
ОТП Банк Москва
от 240 000 до 270 000 ₽
Sportmaster Lab Санкт-Петербург
от 150 000 ₽
До 200 000 ₽
28 янв. 2021, в 09:38
5000 руб./за проект
28 янв. 2021, в 09:32
3000 руб./за проект