全为个人总结,不全面,不详细。
Java内存模型:用来屏蔽java程序在各种不同的硬件和操作系统对内存的访问差异,实现java程序在不同平台上都能达到内存访问一致性。
Java内存模型的主要目标是定义程序中变量的访问规则。即在虚拟机中将变量存储到主内存或者将变量从主内存中存取出这样的底层细节。(这里的变量指的是实例字段,静态字段,构成数组对象的元素,不包括局部变量和方法参数)
主内存:java虚拟机中规定说有的变量都必须在主内存中产生。
工作内存:每个线程都有自己的工作内存,该工作内存是线程私有的。工作内存保存了线程需要的变量在主内存中的副本。
虚拟机规定,线程对主内存变量的修改必须在线程的工作内存中进行,不能直接读写主内存中的变量。不同的线程之间不能相互访问对方的工作内存。
java内存模型图工作内存和主内存交互
1)从主存中read变量值
2)load到工作内存的副本中
3)传给处理器use(执行)
4)给副本assign(赋值)
5)将值传回主内存store
6)最后write到主内存中
内存模型三个特性
通过处理原子性、可见性和有序性三个特性来解决缓存不一致问题。
1)原子性:操作不可中断,要么一定做完,要么不做
2)一致性:线程对变量的修改会立即刷新到主存中,保证其他线程读取到最新的值
3)有序性:程序执行的顺序按代码的先后顺序执行
volatitle关键字
保证了可见性和有序性,volatitle用来修饰变量。
网友评论