java 内存模型
1 平台的内存模型
在共享内存的多处理器体系架构中,每个处理器都拥有自己的缓存,并且定期的与主内存进行协调。
串行一致性:程序只存在唯一的执行顺序,而不考虑这些操作在何种处理器上执行,并且在每次读取变量时,都能获取执行序列中(任何处理器)最近一次写入该变量的值。
在现代支持共享内存的多处理器中,当跨线程共享数据时,会出现奇怪的情况,在java中需要使用适当的同步方法。在底层是使用内存栅栏来实现。
2 Happens-Before 规则
程序顺序规则:如果程序中 操作A 在操作B 之前,那么线程中 操作A 将在 操作B 之前执行。
监视器锁规则:在监视器锁上的解锁操作必须在同一个监视器锁上的加锁操作之前执行。
volatile 变量:对 volatile 变量的写入操作必须在对该变量的读操作之前执行
线程启动规则:在线程上对 Thread.Start 的调用必须在该线程中执行任何操作之前执行。
线程结束规则:线程中的任何操作都必须在其他线程检测到该线程已经结束之前执行,或者从 Thread.Join 中返回,或者调用 Thread.isAlive 时返回false
传递性:如果 操作A 在 操作B 之前,并且 操作B 在 操作C 之前执行,那么 操作A 必须在 操作C 之前执行。
3 在 java 内存模型中, final 域能确保初始化过程的安全性,从而可以不受限制的访问不可变对象。
学习过程中,难免出错。如果您在阅读过程中遇到不太明白,或者有疑问。欢迎指正...联系邮箱crazyCodeLove@163.com
如果觉得有用,想赞助一下请移步赞助页面:赞助一下
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)