前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JMM模型_kmv模型

JMM模型_kmv模型

作者头像
全栈程序员站长
发布2022-10-04 09:15:53
2920
发布2022-10-04 09:15:53
举报

大家好,又见面了,我是你们的朋友全栈君。

代码语言:javascript
复制
1.JMM介绍:
java memory model,java内存模型
2.JMM内存模型的组成:
主内存(共享内存):
* heap堆: 存放所有对象的实例;堆不存放对象引用和基本数据类型,只存放对象实例本身
* method area方法区(也叫静态区): 方法区存放Class类对象以及一些static,final变量;方法区的数据都是唯一的,常量池也在方法区中
工作内存(线程私有内存,每个线程对应一个工作内存):
* program counter register(程序计数器): 每个线程都有一个程序计数器,代表当前线程的字节码行号指示器,比如cpu切换时需要用程序计数器来完成
* Java Virtual Machine Stacks(虚拟机栈): java方法执行的内存模型,每次有方法进栈执行,都会创建一个栈桢,来保存方法中的所有变量;栈桢保存基本数据类型是保存具体的值,保存引用数据类型保存主内存引用;当方法真正需要用到引用数据类型的变量值,就会去主内存中读取变量副本到栈桢,操作完毕后,再更新回主内存
* native method stacks(本地方法栈): 类似于虚拟机栈,但是本地方法栈是指使用java调用操作系统语言(C,C++)的方法,通常不需要我们关心
3.JMM线程通信:
* 共享变量:
每一个线程的工作内存(程序计数器,虚拟机栈,本地方法栈)都会从主内存(方法区,堆)中保存一份它所需要用到的变量的副本,当它对变量操作完毕后,就会将修改后的数据更新到主内存中(存在并发问题)
* 消息传递: wait()/notify()
4.Java内存模型与硬件内存架构的关系:
硬件内存架构分为:cpu寄存器(存储数据),cpu缓存区(缓存数据),cpu主内存(从硬件架构的角度看,主内存的数据来源于整个jvm,即jvm的主内存和工作内存都是硬件架构的主内存);
Java中的线程实际上是一个轻量级的进程lwp(light weight process),jvm将lwp映射为操作系统cpu的内核线程来处理数据;cpu内存线程处理cpu寄存器的数据,而cpu寄存器的数据优先从cpu缓存中获取(也叫缓存命中率),如果cpu缓存没有,再从主内存获取数据 
在这里插入图片描述
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年9月5日 上,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档