首页 > 系统相关 >面试必问并发编程内存模型JMM与内存屏障剖析 学习

面试必问并发编程内存模型JMM与内存屏障剖析 学习

时间:2024-05-05 21:12:43浏览次数:17  
标签:缓存 必问 指令 线程 内存 JMM 排序

总课程:

1、JMM。

每个线程会产生一个变量副本。如下图所示,第二个变量修改了变量initFlag,但线程1并不会退出,是因为每个线程产生了副本。----解决方法:volatile

CPU缓存一致性协议:MESI机制,以及内存模型底层八大原子操作。

Volatile缓存可见性实现原理:底层实现主要通过汇编lock前缀指令,它会锁定这块内存区域的缓存(缓存行锁定),并回写到主内存:
lock指令的解释:
1、会将当前处理器缓存行的数据立即写回到系统主内存。
2、通过MESI协议,这个写回内存的操作会引起在其他CPU里缓存了该内存地址的数据无效。
3、提供内存屏障功能,使lock前后指令不能重排序。

指令重排序和内存屏障。
并发编程三大特性:可见性、有序性、原子性
volatile保证可见性与有序性,但是不保证原子性,synchronized可以保证原子性。
指令重排序:在不影响单线程程序执行结果的前提下,计算机为了最大限度的发挥机器性能, 会对机器指令重排序优化。
重排序遵循的原则:as-if-serial与happens-before原则。
as-if-serial:
不管怎么重排序,单线程程序的执行结果不能被改变。所以编译器和处理器不会对数据依赖关系的操作做重排序。
happens-before原则:

标签:缓存,必问,指令,线程,内存,JMM,排序
From: https://www.cnblogs.com/coldcodeSJTU/p/18173885

相关文章

  • Jmeter内存溢出:java.lang.OutOfMemoryError: Java heap space解决思路
    一、问题原因用JMeter压测,有时候当模拟并发请求较大或者脚本运行时间较长时,JMeter会停止,报OOM(内存溢出)错误。原因是JMeter是一个纯Java开发的工具,内存由java虚拟机JVM管理,当内存回收不及时,堆内存不足时,就会报内存溢错误。概念补充:内存泄露:应用使用资源之后没有及时释放,导致应......
  • [转帖]深入JVM - Code Cache内存池
    https://juejin.cn/post/6985913007142354958 1.本文内容本文简要介绍JVM的CodeCache(本地代码缓存池)。2.CodeCache简要介绍简单来说,JVM会将字节码编译为本地机器码,并使用CodeCache来保存。每一个可执行的本地代码块,称为一个nmethod。nmethod可能对应一个......
  • 内存取证-volatility工具的使用
    0x00volatility介绍Volatility是一款非常强大的内存取证工具,它是由来自全世界的数百位知名安全专家合作开发的一套工具,可以用于windows,linux,macosx,android等系统内存取证。Volatility是一款开源内存取证框架,能够对导出的内存镜像进行分析,通过获取内核数据结构,使用插件获取内存......
  • BufferedImage内存泄漏和溢出问题
    java的ImageIO处理图片在使用Thumbnailator时出现了OOM问题,但是其使用方法只有一行代码,无法针对其内部使用的对象进行资源释放,所以使用原生的Java类库中ImageIO来处理图片。关键有三个类:ImageIO、BufferedImage、GraphicsImageIO类包含两个静态方法:read()和write(),通过这两......
  • 12. 内存管理(Memory Management)
    内存管理目标MAINMEMORYMainmemory(主内存)iscentral(中心)totheoperation(运作)ofamoderncomputersystem.Memoryconsistsofalargearrayofbytes(一大组字节数据或者字节序列),eachwithitsownaddress(地址).(内存是由一大组字节组成,每一个字节都有自己的地址......
  • Unity性能分析(三)内存分析
    Unity中有两种分析内存的方法:MemoryProfiler:内置的分析器,提供内存使用的基本信息。MemoryProfilerpackage:将package添加到项目中,更详细地分析内存使用情况。可以存储和比较快照查找内存泄漏,查看内存布局以查找内存碎片问题。确定物理RAM限制每个目标平台都有一个内存限......
  • openGauss 内存表特性
    内存表特性MOT介绍使用MOTMOT的概念附录详情查看:https://opengauss.org详情查看:https://docs-opengauss.osinfra.cn......
  • openGauss 内存优化表MOT管理
    内存表特性MOT介绍使用MOTMOT的概念附录详情查看:https://opengauss.org详情查看:https://docs-opengauss.osinfra.cn......
  • selenium 未即时关闭引起的内存泄漏 差点死机
    seleniumwebdriverfirefox测试自动登录获取token,测试可以达到目的。然后日常摸鱼后发现浏览器快卡死了,切tty看top,任务没跑多少,内存倒是快榨干了,这不合理,也没有跑什么大内存程序,先把bt、sync给kill了,内存情况也没有太好转,于是看下内存占用,然后找内存占用高的进程,把这些占用高......
  • JVM内存管理
    在JVM初识中提到之所以在程序和操作系统之间增加JVM,就是JVM有些内存管理的特性直接在操作系统上实现有些费劲。那么JVM的内存管理是怎样的呢?应用程序运行大致如下过程: 其中内存部分就是运......