JVM和JMM

1.Java内存区域划分为五个区域
在这里插入图片描述
方法区:存储的是虚拟机加载的类和一些常量 static修饰的变量
堆:JVM启动的时候,存放java的实例对象
虚拟机栈:java的方法内存模型. 叫做栈帧. 每个栈帧里面存放的有(局部变量/基本的数据类型变量/引用类型的地址).
程序计数器:线程的私有数据 ,用来记载下一条指令的地址.
本地方法栈:native

2.Java Memory Model(JMM)java内存模型
(规格 规范)
在这里插入图片描述
二丶硬件内存架构与java内存模型
1.硬件内存模型
在这里插入图片描述

2.java线程与硬件处理器
在这里插入图片描述
3.java线程与硬件内存的架构关系
在这里插入图片描述
4.java内存模型存在的必要性
为了解决java线程的不安全性
三丶java内存模型对并发特征的保证
1.Java并发编程的三个重要特征
原子性: 不可分割的操作
有序性: 次序,java代码中的次序 和 CPU中的执行顺序(不是一样的)
可见性: 线程内部的私有数据对其他的线程是不可见的
2.JMM对三大特性的保证

A.JMM与原子性
比如 x=10 只有一个写操作 具有原子性
y = x 第一步 线程x读到工作空间,
第二步 x 写入到y 的空间
第三步 主存中刷新y的值 没有原子性
i++ 也没有原子性
z=z+1 也没有原子性
多个原子性的操作组合到一起就没有原子性
简单的赋值操作是有原子性的
JMM 只保证了基本的读取和赋值操作是有原子性的
Sychronized Lock类的lock方法.

B.JMM与有序性
volatile
sychronized
lock(显示锁)
happens-before规则
1)程序次序
2)锁规则:后一次加锁必须在前一次解锁.
3)volatile 规则:用volatile修饰的变量次序不能变化
4)传递规则:A->B ->C, 得出A-> C
5)中断规则:interrput()
6)线程终结:线程死亡之前,逻辑单元应该执行完成.
7)对象的终结:finalize()

C.JMM与可见性
volatile: 一个工作空间读取了以后,将Cache Line置为无效状态. 然后其他CPU的线程
在执行的时候,就从Cache读不到,需要从主存中重新读.

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值