java内存模型是java虚拟机规范中定义的关于java程序中变量的访问规则,主要目标是为了屏蔽不一样硬件和操做系统对于变量访问方式的差别,在java虚拟机层面保持相同的变量访问的语义。java
java内存模型把内存分为主内存和工做内存,主内存是虚拟机内存的一部分能够认为是Java堆,工做内存是java虚拟机中每一个线程本身的工做内存,能够认为是线程的栈空间。并发
java虚拟机为工做内存和主内存的交互定义8种操做,8种操做之间要遵循必定的规则。app
java内存模型主要围绕着并发过程当中,原子性、可见性、有序性三个特征来设计的。操作系统
原子性主要经过是经过原子性的变量操做和锁机制来完成的。线程
可见性主要经过volatile、synchronized和final来实现。设计
有序性主要是经过volatile和synchronized来保证,java语言中也自带了先行发生原则,也叫happens-before原则。对象
happens-before原则主要包括程序次序原则、管程锁定规则、volatile变量规则、线程启动规则、线程终止规则、线程中断规则、对象终结规则、传递性。内存