本月博客排行
-
第1名
龙儿筝 -
第2名
johnsmith9th -
第3名
wy_19921005 - zysnba
- sgqt
- lemonhandsome
年度博客排行
-
第1名
宏天软件 -
第2名
青否云后端云 -
第3名
龙儿筝 - gashero
- wallimn
- vipbooks
- benladeng5225
- wy_19921005
- fantaxy025025
- qepwqnp
- e_e
- 解宜然
- zysnba
- ssydxa219
- sam123456gz
- javashop
- arpenker
- tanling8334
- kaizi1992
- xpenxpen
- gaojingsong
- wiseboyloves
- xiangjie88
- ranbuijj
- ganxueyun
- sichunli_030
- xyuma
- wangchen.ily
- jh108020
- lemonhandsome
- zxq_2017
- jbosscn
- Xeden
- luxurioust
- lzyfn123
- zhanjia
- forestqqqq
- johnsmith9th
- nychen2000
- ajinn
- wjianwei666
- hanbaohong
- daizj
- 喧嚣求静
- silverend
- mwhgJava
- kingwell.leng
- lchb139128
- lich0079
- kristy_yy
最新文章列表
Java多线程高并发基础篇(六)-JMM重排序规则
我们知道,重排序的目的是在不改变程序执行结果的前提下,提高编译器和处理器对程序的执行性能。但是,重排序不是任意的,所谓无规矩不成方圆。理解重排序就需要知道重排序必须遵守的规则,总结起来就是我们今天要说的Happens-Before规则。在JSR-133: JavaTM Memory Model and Thread Specification中有相关描述,原版英文请见pdf文件,下载了一份供大家 ...
Volatile实现原理
读写volatile变量就像是访问一个同步块一样,是原子的且是可见的,总是能访问到最新的值。
原子性
读写volatile变量是原子操作,但读写变量不就是一条指令的事吗(mov、ldr),难道这还可分?没错绝大多数变量读写都是原子的,除了在32位JVM下对long、double的读写,就不是原子的。这是因为在32位下,总线宽度就只有32bit,对64位数据的读写需要分两次进行,依次读 ...
从源代码到Runtime发生的重排序
源代码和Runtime时执行的代码很可能不一样,这是因为编译器、处理器常常会为了追求性能对改变执行顺序。然而改变顺序执行很危险,很有可能使得运行结果和预想的不一样,特别是当重排序共享变量时。
从源代码到Runtime需要经过三步的重排序:
编译器重排序
为了提高性能,在不改变单线程的执行结果下,可以改变语句执行顺序。
比如尽可能的减少寄存器的读写次数,充分利用局部性。像下面这 ...