qiuyadong's Homepage

并发编程底层实现原理


Java代码经过编译后变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终转换成汇编指令在CPU上执行,so,Java中所用的并发机制依赖于JVM的实现和CPU指令;

Volatile原理

  • Volatile是轻量级的synchronized,它在多处理器开发中保证共享变量的”可见性”。一个线程中这个变量改变,另一个线程中也会看到它的改变。如何使用好,它比synchronized的使用和执行成本更低,它不会引起线程上下文的切换和调度。
  • JAVA如何底层使用的? 当被volatile修饰的变量进行写操作时,会多出一个以Lock前缀的指令,在多核处理器中会接着做:将当前处理器缓存行的数据写会系统内存,这个写会操作使在其他CPU里缓存了该内存地址的数据无效。
  • volatile的优化实践,jdk7加入了Linked-TransferQueum,在使用volatile变量时,用一种追加字节的方式来优化队列出队和入队的性能,why,一个对象占4的引用占用4个字节,它追加15个变量,凑够64个字节。在一些64字节的处理器中,可以读取一个队元素到高速缓存行中,这样队列中元素为64个字节填充满高速缓冲区的缓存行,避免头结点和为节点加载到同一个缓存行,使头尾节点修改时不会互相锁定。
  • 当然上面不是最优的,如缓存行并非64字节的、共享变量不会被频繁的写。

synchronized



Comments