侧边栏壁纸
  • 累计撰写 781 篇文章
  • 累计创建 1 个标签
  • 累计收到 1 条评论
标签搜索

底层

Dettan
2021-07-10 / 0 评论 / 0 点赞 / 94 阅读 / 744 字
温馨提示:
本文最后更新于 2022-04-30,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。
内存模型: 在特定的操作协议下,对特定内存或高速缓存进行访问的过程抽象.
工作内存 : 线程的独有内存, 通常是 cpu缓存, 寄存器 等
主内存 : 线程共享内存.

每个线程只能读取自己的工作内存和主内存.

每个处理器都有一个高速缓存, 其通过缓存一致性协议来与主内存进行交互.
线程会把要操作的数据(实例字段,静态字段 和构成数组对象的元素,不包括局部变量和方法参数)复制到工作内存中, 不会复制整个对象,只可能会复制要使用的字段.
如果局部变量是引用类型,那他引用的对象在java堆中被各个线程共享.
主内存之间的交互操作
都是原子操作(long和double除外(32位机上))
lock : 把主内存的变量标识为线程独占的状态
unlock : 给主内存的变量解除线程独占的状态
主内存 → 工作内存 (非连续执行)
read : 从主内存中变量传输到工作内存中
load : 把从主内存中得到的对象值放入工作内存中的变量副本中.
工作内存 ←→ 执行引擎
use : 把工作内存中的一个变量的值传递给执行引擎
assign : 把一个从执行引擎接收的值赋给工作内存中的变量.
工作内存 → 主内存 (非连续执行)
store : 把工作内存中的变量传送到主内存中
write : 把从工作内存得到的值写入主内存的变量中

规则
新变量只能在主内存中诞生
read 和 load , store 和 write 不允许单独出现, 即不能只传输不用.
assign 之后必须有同步回主内存
一个变量在同一时刻只允许一个线程执行lock操作.
lock可被同一线程执行多次, 但也要相应地多次unlock
如果lock变量,那么会清空工作内存中此变量的值.
未lock的不允许去unlock
不能unlock其它线程lock的东西
unlock之前要把工作内存中的变量值同步到主内存中.




0

评论区