- 博客(4)
- 资源 (3)
- 收藏
- 关注
原创 volatile的使用优化
在jdk7 之后,由于重排序因素,使用该方法作用失效,仅作知识原理学习著名的Java并发编程大师Doug lea在JDK 7的并发包里新增一个队列集合类LinkedTransferQueue,它在使用volatile变量时,用一种追加字节的方式来优化队列出队和入队的性能。LinkedTransferQueue的代码如下:/** 队列中的头部节点 */private transient fin...
2018-10-22 15:49:19 899
原创 volatile实现内存可见性分析:字节码版本
声明一个volatile变量,并赋值public class VolatileTest { static volatile int i; public static void main(String[] args){ i = 10; }}看看加了volatile之后,编译出来的字节码有什么不同,执行 javap -verbose Volatile...
2018-10-22 15:38:50 2207
原创 CPU指令重排与缓存一致性
程序中CPU计算+与内存交互(读取,赋值),CPU计算速度远远高于与内存交互的速度(好比内存与查数据库)引入缓存提高速度,缓存一致性是保证数据准确性的硬件协议。指令重排无法逾越内存屏障。缓存一致性的实现,先看看x86的cpu缓存结构。1、各种寄存器,用来存储本地变量和函数参数,访问一次需要1cycle,耗时小于1ns;2、L1 Cache,一级缓存,本地core的缓存,分成32K的数据缓存...
2018-10-22 15:08:32 2643
转载 volatile变量内存可见性的原理分析—汇编指令分析
在java虚拟机的内存模型中,有主内存和工作内存的概念,每个线程对应一个工作内存,并共享主内存的数据,下面看看操作普通变量和volatile变量有什么不同:1、对于普通变量:读操作会优先读取工作内存的数据,如果工作内存中不存在,则从主内存中拷贝一份数据到工作内存中;写操作只会修改工作内存的副本数据,这种情况下,其它线程就无法读取变量的最新值。2、对于volatile变量,读操作时JMM会把工作...
2018-10-22 14:52:31 1121 3
zookeeper客户端 图形化界面
2018-04-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人