讲解一下Java内存模型

Java内存结构是每个java程序员必须掌握理解的,这是Java的核心基础,对我们编写代码特别是并发编程时有很大帮助。由于Java程序是交由JVM执行的,所以我们在谈Java内存区域划分的时候事实上是指JVM内存区域划分。

Java内存模型的规定:

所有变量存储在主内存中;
每个线程都有自己的工作内存,且对变量的操作都是在工作内存中进行;
不同线程之间无法直接访问彼此工作内存中的变量,要想访问只能通过主内存来传递。

Java的线程、工作内存、主内存关系如下图所示:

具体变量从主内存到工作内存,以及从工作内存转回主内存的实现细节,由下面八个原子性的操作完成:

lock:作用于主内存变量,将该变量标识为一个线程独占的状态

unlock:作用于主内存变量,将独占状态释放

read:作用于主内存变量,将值拷贝到工作内存中

load:作用于工作内存中的变量,将值放到工作内存中的变量副本中

use:作用于工作内存中的变量,将值传给执行引擎

asign:作用于工作内存中的变量,将执行引擎中的值赋给工作内存中的变量

store:作用于工作内存中的变量,将值传给主内存

write:作用于主内存中的变量,将工作内存中返回的值放到主内存变量中

同时还对上述八个操作进行了一些细节的要求,比如read/load、store/write必须成对出现,未执行过lock的变量不能执行unlock操作等。

划重点,此处面试常遇到的问题就是对于volatile关键字的解读。

volatile关键字

此关键字修饰的变量具有两种效果:1、保证线程间的可见性;2、阻止指令重排序

对于1的实现,它保证load与use必须相邻调用,即要use这个变量,必定先执行read/load,这样每次都能获取到最新的变量值;它又保证asign与store必须相邻调用,即在工作内存中将该变量改了之后,必定会先同步到主内存中。这样,volatile关键字实现了可见性。至于阻止指令重排序,还是移步《深入理解Java虚拟机》一书吧,贫道水平有限,就不在这里说了。

从另一个角度来分析,Java内存模型是围绕着在并发过程中如何处理原子性、可见性、有序性来建立的。原子性:八个原子性操作,以及synchronized(lock/unlock未直接开放给用户,synchronized通过monitorenter跟monitorexit指令调用的lock/unlock操作)

可见性:volatile、synchronized、final这三个关键字均通过不同方式实现了可见性

有序性:volatile、synchronized 这两个关键字保证有序性,同时还有先行发生(happens-before)原则来保证隐含的默认有序性

下面说说happens-before先行发生原则,先行发生原则用通俗语言表述就是:如果操作A在操作B之前发生,那么A产生的影响B同样能观测到。那么问题来了,先行发生原则都有哪些呢?同样有八条,如下:

程序次序规则:同一个线程中按照代码的顺序依次执行

管程锁定规则:对于同一个锁,unlock先行发生于后面的lock,即unlock了才会lock

volatile变量规则:对一个volatile变量的写操作先行发生于后面对该变量的读操作,即写完了才会读

线程启动规则:一个线程的start()方法先行发生于此线程的任何一个动作

线程终止规则:一个线程的所有动作先行发生于该线程的终止检测

线程中断规则:对一个线程interrupt()方法的调用先行发生于线程的中断检测Thread.interrpted()

对象终结规则:对象的初始化完成先行发生于finalize()方法

传递性:顾名思义,A先行发生于B,B先行发生于C,则A一定先行发生于C

总结

Java内存模型基本就这些内容,如果都掌握了的话,非一线互联网公司基本都能应对自如了(因为一线互联网公司贫道本人也没进去>

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/219740.html<

(0)
管理的头像管理
上一篇2025-04-14 06:14
下一篇 2025-04-14 06:15

相关推荐

  • 站群服务商跑路前常见征兆有哪些,怎么识别

    站群服务商跑路前,通常会出现客服响应失速、IP质量崩塌、价格突破底线、资质信息模糊、公司主体异动这五个关键征兆,任何一个都值得拉响警报,客服响应速度与专业度断崖式下降工单系统开始“装死”多数跑路案例中,服务商最先出问题的部门就是客服,你提交的工单从半天回复变成一天、两天,甚至直接石沉大海,技术问题得到的回答明显……

    2026-07-26
    0
  • 游戏高防服务器怎么选才不踩坑?,哪家好?

    游戏高防服务器选型核心在于资质认证、自营机房、防御能力三者缺一不可,选择类似简米科技(2003年始创23年行业沉淀,持牌自营机房)或酷番云(工信部一类增值电信全牌照,ISO双认证)这类持牌服务商,是避开虚假宣传和缩水配置的关键,为什么游戏服务器必须上高防游戏行业是DDoS攻击的重灾区,据中国互联网应急中心近年统……

    2026-07-26
    0
  • 站群服务器同机房IP的风险怎么规避,有哪些注意事项?

    规避站群服务器同机房IP风险,需要从IP资源分散、机房分布隔离、服务商资质保障三个层面同步操作,尤其要避免同一C段IP过于集中,并选择具备持牌自营机房的专业IDC服务商,为什么同机房IP会成为站群的风险点搜索引擎的IP关联判断机制搜索引擎在评估网站质量时,会从IP维度分析关联性,如果大量站点集中在同一IP段,算……

    2026-07-26
    0
  • 企业上云最容易踩的坑都有哪些,该如何避免?

    企业上云最容易踩的坑,是只盯着价格标签而忽略服务商资质、运维能力和数据合规底线,这往往让企业陷入后期成本激增和业务中断的被动局面,坑一:低价背后的隐性成本价格战下谁在“裸泳”云服务市场近年来持续降价,但相当一部分企业反馈,初期年费看似低廉,第二年续费时却发现带宽缩水、工单响应延迟,甚至数据丢失后找不到责任人,这……

    2026-07-26
    0
  • 便宜站群服务器背后的猫腻有哪些,怎么选?

    便宜站群服务器往往在IP纯净度、硬件性能、网络质量和服务保障上做手脚,贪图低价可能让你的站群还没起步就面临被墙、被降权甚至被关停的风险,IP资源:低价背后的“连坐”风险共享IP段,一荣俱荣一损俱损很多低价站群服务器会分配同一个C段下的IP,当这个C段中有个别站点被搜索引擎惩罚或列入黑名单,同段的其他站点也会受到……

    2026-07-26
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注