java的内存模型认识
参考,欢迎点击原文:https://www.bilibili.com/video/BV1CW411U726(B站)
https://www.bilibili.com/video/BV12t411u726(B站)
https://www.bilibili.com/video/BV1F64y1B7sV(B站)
java内存模型这一块看文章看的我实在是累,抽个空去我大B站找找相关视频地铁上看吧,整理了一下
科普tip:new一个对象占16字节
并发编程三大特性:可见性,原子性,有序性
对象:对象头,对象体数据,尾部填充对其字节
Cpu组成: 寄存器(计算的),计数器(存储指令地址)
线程调度: 操作系统
先来贴个java内存多线程工作原理图

如图,线程ABC各自有自己的工作内存,这个工作内存也可以称之为共享变量副本,
- 工作内存是什么用的呢?其实就是线程自己都会有自己的内存,这个内存是从主内存那边copy过来的。
- 同样主内存是啥?可以理解为咱们的jvm使用的运行内存,每次线程操作完资源后都会同步资源到主内存中
- jmm :java内存模型,使用了“缓存一致性协议”
大概解释了下图中的各个名词,下面来说下运行原理:
如线程A在使用资源小a时,线程B也获得了资源小a,同时资源B也正在对小a进行操作,这样同时两个线程对一个资源操作的话就会出现问题,如都给小a加一,这样的话,如果线程A和线程B都返回值给主内存了,小a对值就对不上了,所以这样我们就衍生了针对性处理的方案。
- 加悲观锁:每次操作小a时候都先上把锁,其他线程如果想获取小a需要先等锁释放了才能拿到这资源。
- 使用volatile修饰资源:这个关键词的使用是建立在缓存一致性协议上的,就是资源小a一旦发生改变就立即同步到主内存中,这个操作且保证了原子性和一致性,这样其他线程拿到的就是最新的
java的内存模型认识的更多相关文章
- java线程内存模型,线程、工作内存、主内存
转自:http://rainyear.iteye.com/blog/1734311 java线程内存模型 线程.工作内存.主内存三者之间的交互关系图: key edeas 所有线程共享主内存 每个线程 ...
- Java虚拟机内存模型及垃圾回收监控调优
Java虚拟机内存模型及垃圾回收监控调优 如果你想理解Java垃圾回收如果工作,那么理解JVM的内存模型就显的非常重要.今天我们就来看看JVM内存的各不同部分及如果监控和实现垃圾回收调优. JVM内存 ...
- java String 内存模型
关于java的内存模型,参照以下的一篇文章: https://isudox.com/2016/06/22/memory-model-of-string-in-java-language/
- Java虚拟机--内存模型与线程
Java虚拟机--内存模型与线程 高速缓存:处理器要与内存交互,如读取.存储运算结果,而计算机的存储设备和处理器的运算速度差异巨大,所以加入一层读写速度和处理器接近的高速缓存来作为内存和处理器之间的缓 ...
- 掌握Java的内存模型,你就是解决并发问题最靓的仔
摘要:如果编写的并发程序出现问题时,很难通过调试来解决相应的问题,此时,需要一行行的检查代码,这个时候,如果充分理解并掌握了Java的内存模型,你就能够很快分析并定位出问题所在. 本文分享自华为云社区 ...
- Java对象内存模型
2 Java对象内存模型 在HotSpot虚拟机中,对象在内存中存储的布局可以分为3块区域:对象头(Header). 实例数据(Instance Data)和对齐填充(Padding). 在 JVM ...
- 全网最硬核 Java 新内存模型解析与实验单篇版(不断更新QA中)
个人创作公约:本人声明创作的所有文章皆为自己原创,如果有参考任何文章的地方,会标注出来,如果有疏漏,欢迎大家批判.如果大家发现网上有抄袭本文章的,欢迎举报,并且积极向这个 github 仓库 提交 i ...
- Java线程内存模型-JVM-底层原理
public class Demo1 { private static boolean initFlag=false; public static void main(String[] args) t ...
- Java虚拟机 - 内存模型
本文主要介绍Java虚拟机的内存分布以及对象的创建过程. 一.Java虚拟机的内存分布 文章开始前读者需要了解Java虚拟机的运行时数据区是怎样划分的.如下图所示: 1.程序计数器(Program C ...
- Java的内存模型
"让计算机并发执行若干个运算任务"与"更充分地利用计算机处理器的效能"之间的因果关系,看起来顺理成章,实际上它们之间的关系并没有想象中的那么简单,其中一个重要的 ...
随机推荐
- 【内存操作】C语言内存函数介绍以及部分模拟实现【初学者保姆级福利】超详细的解释和注释
C语言 内存函数的使用以及部分模拟实现 求个赞求个赞求个赞求个赞 谢谢 先赞后看好习惯 打字不容易,这都是很用心做的,希望得到支持你 大家的点赞和支持对于我来说是一种非常重要的动力 看完之后别忘记关注 ...
- Java开发学习(四十七)----MyBatisPlus删除语句之多记录操作
1.多记录操作 先来看下问题: 之前添加了很多商品到购物车,过了几天发现这些东西又不想要了,该怎么办呢? 很简单删除掉,但是一个个删除的话还是比较慢和费事的,所以一般会给用户一个批量操作,也就是前面有 ...
- 记录一则exachk进程占用大量CPU资源
有Exadata客户在进行exachk巡检之后反馈,发现系统中,exachk进程占用了大量CPU资源. 了解之前的变更,只是巡检之前升级了AHF,然后进行标准的exachk巡检. 现象: 目前机器整体 ...
- Kafka的ACK机制
Kafka的ack机制,指的是producer的消息发送确认机制,这直接影响到Kafka集群的吞吐量和消息可靠性.而吞吐量和可靠性就像硬币的两面,两者不可兼得,只能平衡. ACK有3个可选值,分别是1 ...
- Hadoop-基础知识面试题
1.Hadoop集群的最主要瓶颈 磁盘IO 2.Hadoop三大组件 (1).HDFS HDFS(Hadoop Distributed File System)是 Hadoop 项目的核心子项目,主要 ...
- NC15065 小牛vs小客
题目链接 题目 题目描述 小牛和小客玩石子游戏,他们用n个石子围成一圈,小牛和小客分别从其中取石子,谁先取完谁胜,每次可以从一圈中取一个或者相邻两个,每次都是小牛先取,请输出胜利者的名字(小牛获胜输出 ...
- 解决maven打包compliation failure程序包不存在
1.问题说明 spring boot项目,在cmd中使用mvn clean package打包报错如下: 说这个程序包不存在,而实际上在eclipse中查看是能找到的. 2.问题原因 后来看了一下这个 ...
- zabbix-server.service failed解决方法
1.问题描述 centos7中安装的zabbix server在重启系统后无法启动了,查看状态报错如下: 2.问题原因 selinux没有关闭! 3.解决 永久关闭selinux, 将SELINUX值 ...
- Java Socket编程系列(四)开发支持多客户端访问的Server
例子来自Java官方教程,稍作调整. 上一篇介绍了单客户端访问的Server实现,这一篇实现的是多个客户端请求服务端,根据服务端提示进行一系列操作. 协议类(和系列三一样没变): package co ...
- vue+antv g6+element-ui完整流程图
最近一直在研究流程图相关的技术,一次在逛GitHub时发现了一个技术栈为vue+g6+element-ui的项目,基础功能完好,如node与edge的托拉拽,主界面如下: