Java Memory Model基础
来源:互联网 发布:如何seo推广 编辑:程序博客网 时间:2024/05/17 22:24
Java 内存模型 ( Java Memory Model )
根据Java Language Specification中的说明, JVM系统中存在一个主内存(Main Memory或Java Heap Memory),Java中所有变量都储存在主存中,对于所有线程都是共享的。
每条线程都有自己的工作内存(Working Memory),工作内存中保存的是主存中某些变量的拷贝,线程对所有变量的操作都是在工作内存中进行,线程之间无法相互直接访问,变量传递均需要通过主存完成。
其中, 工作内存里的变量, 在多核处理器下, 将大部分储存于处理器高速缓存中, 高速缓存在不经过内存时, 也是不可见的.
内存模型的特征
–Visibility 可见性 (多核,多线程间数据的共享)
–Ordering 有序性 (对内存进行的操作应该是有序的)
–Visibility 可见性 (多核,多线程间数据的共享)
–Ordering 有序性 (对内存进行的操作应该是有序的)
•JMM怎么体现可视性(Visibility) ?
在JMM中, 通过并发线程修改变量值, 必须将线程变量同步回主存后, 其他线程才能访问到.
•JMM怎么体现有序性(Ordering) ? 通过Java提供的同步机制或volatile关键字, 来保证内存的访问顺序.
Happens-Before Memory Model
如果B能够看到A动作产生的结果,我们说A happens-before B,JMM定义了一些这样的规则,如:
–Program order rule. Each action in a thread happens-before every action in that thread that comes later in the program order.
–Monitor lock rule. An unlock on a monitor lock happens-before every subsequent lock on that same monitor lock.
–Volatile variable rule. A write to a volatile field happens-before every subsequent read of that same field
为了实现 Happens-Before Ordering原则, Java及jdk提供的工具:
a, synchronized关键字
b, volatile关键字
c, final变量
d, java.util.concurrent.locks包(since jdk 1.5)
e, java.util.concurrent.atmoic包(since jdk 1.5)
a, synchronized关键字
b, volatile关键字
c, final变量
d, java.util.concurrent.locks包(since jdk 1.5)
e, java.util.concurrent.atmoic包(since jdk 1.5)
- Java Memory Model基础
- Java Memory Model基础
- Java Memory Model基础
- JAVA Memory Model
- The Java Memory Model
- Java Memory Model
- Java Memory Model
- java-memory-model
- Java Memory Model
- Java Memory Model
- Understanding Java Memory Model
- java memory model
- Java Memory Model--学习小结
- Java Memory Model & multithread-programming
- Java Memory Model的介绍
- java内存模型(Java Memory Model)
- JAVA内存模型(Java Memory Model)
- JAVA内存模型(Java Memory Model)
- hdu1561(树形DP+背包问题)
- Chrome插件(Extensions)开发攻略
- 用公共表表达式完成一些对特殊部门的操作
- EC-item 5: Know what functions C++ silently writes and calls
- 三种方式实现自定义圆形页面加载中效果的进度条
- Java Memory Model基础
- 人生真谛
- repo 的一些用法和理解
- 负数在计算机中如何表示?
- eclipse中JUnit工具的使用
- 2013华为校园招聘上机题
- QtWebKit
- TDD简介
- Oracle之 自建字符串函数