java内存模型

1、JVM内存区域

  • 方法区:类信息、常量、static、JIT (信息共享)
  • java堆:实例对象 GC (信息共享) OOM
  • VM stack:JAVA方法在运行的内存模型 (OOM)
  • PC: java线程的私有数据,这个数据就是执行下一条指令的地址
  • Native method stack: 月JVM的native

2、java内存模型(JMM 规范、抽象的模型)

  • 主内存:共享的信息
  • 工作内存:私有信息、基本数据类型,直接分配到主内存,引用的地址放在工作内存中,引用的对象放在堆中
  • 工作方式:
    • 线程修改私有数据,直接在工作内存修改
    • 线程修改共享数据,把数据复制到工作空间中,在工作空间中修改,修改完之后,刷新到主内存中

3、 硬件内存架构月java内存模型


cpu缓存的一致性问题:并发处理的不同步

解决方法:

- 总线加锁 降低了CPU的吞吐量
- 缓存上的一致性协议(MESI)<br>
当cpu在cache中操作数据时,如果该数据是共享变量,数据在cache读到寄存器中,进行新修改,并更新内存数据<br>
cache line值无效,其他的cpu就从内存中读数据

4、 并发编程的三个重要特征

原子性、可见性和有序性

  • 原子性保证方式:

    • synchronized
    • JUC Lock的lock
  • 可见性
    • volatile:在JMM模型上实现MESI协议
    • synchronized:加锁
    • JUC Lock的lock
  • 有序性
    • Volatile禁止重排序
    • synchronized
    • happens-before原则
      • 程序次序原则
      • 锁定原则:后一次加锁必须等前一次解锁
      • Volatile原则:霸道原则
      • 传递原则:A--B--C A--C

02 java内存模型的更多相关文章

  1. 02 | Java内存模型:看Java如何解决可见性和有序性问题

    什么是 Java 内存模型? 导致可见性的原因是缓存,导致有序性的原因是编译优化,那解决可见性. 有序性最直接的办法就是禁用缓存和编译优化,但是这样问题虽然解决了,我们程序的性能可就堪忧了.   合理 ...

  2. 《深入理解Java内存模型》读书总结

    概要 文章是<深入理解Java内容模型>读书笔记,该书总共包括了3部分的知识. 第1部分,基本概念 包括"并发.同步.主内存.本地内存.重排序.内存屏障.happens befo ...

  3. 深入理解JVM(6)——Java内存模型和线程

    Java虚拟机规范中定义了Java内存模型(Java Memory Model,JMM)用来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果(“即Ja ...

  4. Java 内存模型_1

    title: Java 内存模型_1 date: 2017-01-15 17:11:02 tags: [JMM] categories: [Programming,Java] --- 概述 本文记录 ...

  5. Java 内存模型_2

    title: Java 内存模型_2 date: 2017-01-28 02:04:06 tags: [JMM] categories: [Programming,Java] --- Why 理解 J ...

  6. Java内存模型的深入理解

    基础 并发编程的模型分类 在并发编程需要处理的两个关键问题是:线程之间如何通信 和 线程之间如何同步. 通信 通信 是指线程之间以何种机制来交换信息.在命令式编程中,线程之间的通信机制有两种:共享内存 ...

  7. Java内存模型(转载)

    本文章节: 1.JMM简介 2.堆和栈 3.本机内存 4.防止内存泄漏 1.JMM简介 i.内存模型概述 Java平台自动集成了线程以及多处理器技术,这种集成程度比Java以前诞生的计算机语言要厉害很 ...

  8. 《深入理解Java内存模型》读书总结(转-总结很好)

    概要 文章是<深入理解Java内容模型>读书笔记,该书总共包括了3部分的知识. 第1部分,基本概念 包括“并发.同步.主内存.本地内存.重排序.内存屏障.happens before规则. ...

  9. 深入理解 Java 内存模型(转载)

    摘要: 原创出处 http://www.54tianzhisheng.cn/2018/02/28/Java-Memory-Model/ 「zhisheng」欢迎转载,保留摘要,谢谢! 0. 前提 &l ...

随机推荐

  1. 搭建Keepalived+LNMP架构web动态博客 实现高可用与负载均衡

    环境准备: 192.168.193.80  node1 192.168.193.81 node2 关闭防火墙 [root@node1 ~]# systemctl stop firewalld #两台都 ...

  2. QT生成可执行的EXE程序

    [转载] Qt 官方开发环境使用的动态链接库方式,在发布生成的exe程序时,需要复制一大堆 dll,如果自己去复制dll,很可能丢三落四,导致exe在别的电脑里无法正常运行.因此 Qt 官方开发环境里 ...

  3. 理解Promise (2)

    一进来 我们开始执行 executor函数 传递两个参数 再调用 then 方法 ,then 方法里面有 OnResolve方法,OnReject 方法  在then 方法中,我们一开始的状态是pen ...

  4. CSS3 flexbox弹性布局实例

    常用例子 1.居中对齐 <!DOCTYPE html> <head> <meta charset="utf-8"> <style type ...

  5. 线程数设置和CPU数的关系

    一般说来,大家认为线程池的大小经验值应该这样设置:(其中N为CPU的个数) 如果是CPU密集型应用,则线程池大小设置为N+1 如果是IO密集型应用,则线程池大小设置为2N+1(因为io读数据或者缓存的 ...

  6. WinForm、WPF、ASP.NET窗口生命周期

    https://blog.csdn.net/s_521_h/article/details/73826928

  7. C# 修改注册表立即刷新 转载

    修改注册表后不重启计算机并生效,代码如下:const int WM_SETTINGCHANGE = 0x001A; const int HWND_BROADCAST = 0xffff;IntPtr r ...

  8. FCC 成都社区·前端周刊 第 10 期

    1. Node.js 10 正式发布 在过去的一周,Node.js 10.0.0 正式发布,带来大量改进和修复.这是自 Node.js Foundation 开展以来的第七个主要版本,并将在 2018 ...

  9. xiugai-去除js注释

    <div class="myLoading"> <div class="svg-wrap"> <svg width="8 ...

  10. wl

    <!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="Conten ...