码迷,mamicode.com
首页 > 编程语言 > 详细

java内存模型(待完善)

时间:2015-06-29 06:20:10      阅读:247      评论:0      收藏:0      [点我收藏+]

标签:

JMM

   1、内存模型的抽象。

技术分享

本地内存是JMM的一个抽象概念,并不是真实存在,它涵盖了缓存,写缓冲区,寄存器以及其他的硬件和编译器优化。

 

   2、内存可见性问题?

      ?

   3、重排序

 编译器优化重排序       编译器再不改变单线程程序语义的前提下,可重新安排语句执行顺序。
指令级并行重排序       现代处理器采用了指令并行技术,来将多条指令重叠执行,如果不存在数据依赖性,处理器可以改变语句对应机器指令的执行顺序。
 内存系统重排序       由于处理器使用缓存和读/写缓冲区,这使得加载和存储操作看上去可能是乱序执行。

 

   4、内存屏障指令。

   5、happens-before

   6、顺序一致性

   7、volatile 变量

       volatile 变量

    • 可见性:对于volatile变量的读,总是能看到(任意线程)对这个volatile变量最后的写入。
    • 原子性:对任意单个volatile变量的读/写具有原子性,但类似于volatile++这样的复合操作不具有原子性。

       volatile的读-写内存语义

    • 当写一个volatile变量时,JMM会把该线程对应的本地内存中的共享变量值刷新到主内存。
    • 当读一个volatile变量时,JMM会把该线程对应的本地内存置为无效,线程接下来将从主内存中读取共享变量。

   8、锁(LOCK)

  • 锁释放与volatile写有相同的内存语义。
  • 锁获取与volatile读有相同的内存语义。

   9、final 域

 

还在学习中,还望各位多多指点指点。

java内存模型(待完善)

标签:

原文地址:http://www.cnblogs.com/outpointexception/p/4606433.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!