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. qemu-kvm使用

    创建镜像qemu-img create -f qcow2 test-vm.qcow2 10g 修改镜像大小qemu-img  resize  test-vm.qcow2 +10G   安装系统 qem ...

  2. 2019-8-31-dotnet-core-集成到-Mattermost-聊天工具

    title author date CreateTime categories dotnet core 集成到 Mattermost 聊天工具 lindexi 2019-08-31 16:55:58 ...

  3. 网络拓扑_VLAN与Trunk配置

    实验目的: 1.实现VLAN10的两台主机互通; VLAN20的两台主机互通; 2.VLAN10与VLAN20主机不能互通. 拓扑图: 步骤: 1.依图配置PC1,PC2,PC3,PC4的IP,掩码, ...

  4. python常用函数 W

    with…as with 语句适用于对资源进行访问的场合,确保不管使用过程中是否发生异常都会执行必要的“清理”操作,释放资源,比如文件使用后自动关闭.线程中锁的自动获取和释放等.当python执行wi ...

  5. mysql错误: waiting for table metadata lock

    今天突然发现truncate一个表都慢到不行,于是 SHOW PROCESSLIST 发现错误:waiting for table metadata lock解决方法:查看information_sc ...

  6. 基于Nginx和uWSGI在Ubuntu上部署Django项目

    前言: 对于做Django web项目的童鞋,重要性不言而喻. 参考:https://www.cnblogs.com/alwaysInMe/p/9096565.html https://blog.cs ...

  7. 项目部署到tomcat,浏览器能够访问,手机不能访问。

    问题:有这样一个问题,把项目部署到tomcat上,浏览器能够访问,但是手机不能访问. 解决:在 tomcat中找到conf文件夹,然后找到web.xml

  8. Hash树——数据结构

  9. Oracle DB 查看预警日志

    “Database(数据库)”主页>“Related Links相关链接)”区域> “Alert Log Content (预警日志内容)” 查看预警日志每个数据库都有一个alert_&l ...

  10. Strange fuction hdu 2899

    Strange fuction Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...