- 博客(5)
- 资源 (6)
- 问答 (1)
- 收藏
- 关注
原创 synchronize的实现原理
锁的数据结构同步代码块是使用monitorenter和monitorexit指令实现的,任何java对象都有一个monitor与之关联,当一个monitor被持有后,对象就处于锁定状态。在运行期间,Mard Word里存储的数据会随着锁标志位的变化而变化。Mark Word可能变化为存储以下数据结构。自旋锁 通常我们称Sychronized锁是一种重量级锁,是因为在互斥状态下,没有得到锁的线程会被
2017-02-27 20:40:26 16623 2
原创 保证有序性、原子性、可见性
volatile有序性 上图表示,当第一个操作为XX操作,第二个操作为YY操作时,是否允许重排序,NO表示不允许,空表示允许。 从表中可以看出当第二个操作是volatile写时,不管第一个操作是什么,都不能重排序。这个规则确保volatile写之前的操作不会被编译器重排序到volatile写之后。当第一个操作是volatile读时,不管第二个操作是什么,都不能重排序。
2017-02-25 13:16:26 705
原创 有序性
重排序在执行程序时为了提高性能,编译器和处理器常常会对指令做重排序。重排序分三种类型:编译器优化的重排序。编译器在不改变单线程程序语义的前提下,可以重新安排语句的执行顺序。指令级并行的重排序。现代处理器采用了指令级并行技术(Instruction-Level Parallelism, ILP)来将多条指令重叠执行。如果不存在数据依赖性,处理器可以改变语句对应机器指令的执行顺序。内存系
2017-02-19 15:10:15 1344
原创 原子性
当在一个表达式中使用一个non-long或者non-double型字段时,原子性可以确保你将获得这个字段的初始值或者某个线程对这个字段写入之后的值;但不会是两个或更多线程在同一时间对这个字段写入之后产生混乱的结果值(即原子性可以确保,获取到的结果值所对应的所有bit位,全部都是由单个线程写入的)。但是,如下面(译注:指可见性章节)将要看到的,原子性不能确保你获得的是任意线程写入之后的最新值。 在J
2017-02-18 10:23:47 470
原创 可见性
Java内存模型硬件内存架构CPU缓存CPU读写与缓存的关系Java内存模型和硬件内存架构之间的桥接产生问题共享对象可见性竞争条件Java内存模型Java内存模型把Java虚拟机内部划分为线程栈和堆。每个线程都有自己的线程栈。如下图。线程栈(Thread Stack):线程栈中存放了本地变量(线程执行过程中在方法内定义的变量,无论是基本类型还是引用类型)堆(Heap):堆上则存放J
2017-02-17 23:36:09 403
Elasticsearch大数据搜索引擎
2018-05-07
京东基础架构建设之路 全彩, 带目录版
2018-05-03
关于Java接口嵌套的应用
2013-11-04
TA创建的收藏夹 TA关注的收藏夹
TA关注的人