自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ZSW

  • 博客(6)
  • 问答 (8)
  • 收藏
  • 关注

原创 锁实现原理

本文从happens-before关系出发,结合ReentranLock源码,如何用内存屏障、CAS操作、LOCK指令实现锁的功能。

2017-12-25 20:57:59 2241

原创 Volatile实现原理

读写volatile变量就像是访问一个同步块一样,是原子的且是可见的,总是能访问到最新的值。其底层使用了Lock前缀和内存屏障保证可见性。

2017-12-25 11:16:25 1226

原创 内存屏障保证缓存一致性

缓存一致性协议给缓存行(通常为64字节)定义了个状态:独占(exclusive)、共享(share)、修改(modified)、失效(invalid),用来描述该缓存行是否被多处理器共享、是否修改。所以缓存一致性协议也称MESI。

2017-12-24 15:32:59 1424

原创 从源代码到Runtime发生的重排序

源代码和Runtime时执行的代码很可能不一样,这是因为编译器、处理器常常会为了追求性能而改变执行顺序。然而重排序很危险,很有可能使得运行结果和预想的不一样,特别是当重排序共享变量时。从源代码到Runtime需要经过三步的重排序:编译器重排序->指令重排序->内存系统重排序编译器重排序。

2017-12-22 15:49:03 312

原创 Java内存模型—JMM

有时候编译器、处理器的优化会导致runtime与我们设想的不一样,为此Java对编译器和处理器做了一些限制,JAVA内存模型(JMM)将这些抽象出来,这样编写代码时就无需考虑那么多底层细节,并保证“只要遵循JMM的规则编写程序,其运行结果一定是正确的”。

2017-12-21 17:00:06 256

原创 锁原理:偏向锁、轻量锁、重量锁

java中每个对象都可作为锁,锁有四种级别,按照量级从轻到重分为:无锁、偏向锁、轻量级锁、重量级锁。每个对象一开始都是无锁的,随着线程间争夺锁,越激烈,锁的级别越高,并且锁只能升级不能降级。

2017-12-18 16:15:16 12275 3

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除