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