Java内存模型

来源:互联网 发布:有哪些很污的淘宝店铺 编辑:程序博客网 时间:2024/06/06 09:17

Java内存模型的基础

Java的并发采用的是共享内存模型,java线程之间的通信总是隐式进行,整个通信过程对程序员不可见。 只有了解java线程之间通信的内存机制,才能知道解决各种奇怪的内存可见性问题。

 Java内存模型的抽象结构

  java中所有的实例域,静态域,和数组元素,都在堆内存中,堆内存在线程之间共享。 (文中所指的共享变量,指代实例域,静态域和数组元素)。而局部变量等不会在线程中共享,不存在内存可见性问题,不受内存可见性影响

每个线程都有一个本地内存,共享变量存储在主内存中,线程通过把本地内存中的变量刷新到主内存,然后另一个线程再从主内存中读取该变量到本地内存,从而实现线程之间的通信。

JMM通过控制主内存与每个线程的本地内存之间的交互,来为java程序提供内存可见性保证。

从源代码到指令序列的重排序

重排序分3种

1》编译器优化的重排序。编译器在不改变单线程程序语义的前提下,可以重新安排语句的执行顺序。

2》指令级并行的重排序。现代处理器采用了指令级并行技术