Volatile关键字介绍

简介: Volatile关键字介绍

正文


01 简介


在没有必要的同步的情况下,编译时、运行时,处理器可以进行各种优化。尽管这些优化在大多数情况下都是有益的,但有时它们也会导致一些奇怪的问题。缓存和重排序是在并发环境中可能会让我们特别的优化之一。Java和JVM提供了许多控制内存顺序的方法,其中的volatile关键字就是之一。


02 共享的多处理器架构


CPU负责执行程序指令。因此,他们需要从RAM中检索程序指令和所需的数据。由于cpu每秒能够执行大量的指令,从RAM获取对它们来说并不理想。为了改善这种情况,处理器正在使用乱序执行、分支预测、推测执行等技巧,当然还有缓存。

30.png

随着不同的内核执行更多的指令和操作更多的数据,它们用更多相关的数据和指令填充缓存。这将以引入缓存一致性问题为代价来提系统的高总体性能。


03 Volatile如何实现的


在一个代码程序中,这个关键字的实际作用是:内存可见性以及禁止指令重排序。但是它无法实现原子性。原理采用的是缓存一致性协议、内存屏障以及happes before规则实现的。

31.png


04 经常使用的地方


多线程并发以及 DCL 单例模式中,经常会用到这个关键字。并且在使用长类型时候也最好用它来进行修饰,例如:Long、Double等类型。

相关文章
|
2月前
|
缓存 编译器
volatile关键字
volatile关键字
|
4月前
|
缓存 编译器 C语言
一起来探讨volatile关键字
在C语言中,volatile是一个关键字,用于告诉编译器不要对被声明为volatile的变量做优化,以确保每次对该变量的读写都直接操作内存。
|
7月前
|
缓存 安全 Java
【volatile关键字】
【volatile关键字】
|
8月前
|
存储 缓存 Java
volatile 关键字说明
volatile 关键字说明
24 0
|
存储 Java
浅谈Volatile关键字
该篇文章用来总结笔者对于Volatile关键字的理解,并不会太过深入的探讨。
103 0
浅谈Volatile关键字
|
SQL 缓存 安全
深入理解volatile关键字
深入理解volatile关键字
129 0
深入理解volatile关键字
|
缓存 前端开发 Java
volatile关键字有什么用?
volatile关键字有什么用?
volatile关键字有什么用?
|
缓存 安全 算法
你应该知道的 volatile 关键字(上)
不管是在面试还是实际开发中 volatile 都是一个应该掌握的技能。 首先来看看为什么会出现这个关键字。
你应该知道的 volatile 关键字(下)
不管是在面试还是实际开发中 volatile 都是一个应该掌握的技能。 首先来看看为什么会出现这个关键字。
|
存储 安全 Java
volatile 关键字详解(上)
本文主要是讲解 volatile 关键字的使用,首概括它的三大特征,然后引入 JMM 模型,结尾我们解释了单例模式(懒汉模式)中为什么要用 volatile。
131 0
volatile 关键字详解(上)