Java Memory Model基础
来源:互联网 发布:关于烟的网络歌曲 编辑:程序博客网 时间:2024/06/06 01:32
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)
0 0
- 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)
- 欢迎使用CSDN-markdown编辑器
- JavaScript 开题篇【1】
- ubuntu配置vim为windows下C++编程风格
- Hibernate的单向1-1关联(二)
- AsyncTask
- Java Memory Model基础
- 关于AsyncTask中的cancel方法
- CodeForces 629B Far Relative’s Problem
- Android Design Support Library之CoordinatorLayout和CollapsingToolbarLayout
- 随机过程课中的一个复积分问题
- for循环中变量i始终为length值的分析与解决
- LinearLayout布局的Layout_weight
- 【慕课笔记】5-2 字符流之文件读写流
- nodejs-express-ejs-mongodb-mongoose 错误锦集