美文网首页
java内存模型

java内存模型

作者: pioneerz | 来源:发表于2019-08-08 23:59 被阅读0次

前言:Java内存模型简称JMM(Java Memory Model)

由来

JMM的设计主要是为了屏蔽各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一直的内存访问效果。它主要的目标就是定义程序中各个变量的访问规则。

分类

JMM主要分为主内存(Main Memory) 和工作内存(Working Memory)
1.所有的变量的都存储在主内存;
2.每条线程都有自己的工作线程,工作线程保存了被该线程使用到的变量的主内存的副本拷贝;
3.线程对变量的所有操作(读取/赋值)等操作都是在工作线程中完成的,而不能直接读取主内存中的数据。
4.不同线程之间也无法访问访问对方的工作线程中的变量,线程之间的数据的传递都是通过主内存完成的。
5.他们的关系图如下所示:


java内存模型.jpeg

注:这里所说的内存划分和Java内存区域中的堆/栈/方法去等并不是统一层次的划分,两者基本上没有关系的。

内存间的交互

我们上面也说了,线程之间是没办法访问,所以我们主要的交互就是:
1.怎么将工作内存的数据同步到主内存中?
2.怎么将主内存的数据拷贝到工作线程中?

以下是Java内存中定义的8种操作(在最新的文档中已弃用,所以这里只是稍微提一下):
1.lock(锁定):作用于主内存变量,他把一个变量标记为一个线程独占的状态;
2.unlock(解锁):作用于主内存变量,他将一个锁定的变量释放出来;
3.read(读取):作用于主内存变量,他将一个变量从主内存中传输到工作内存中;
4.load(载入):作用于工作内存变量,他将从主内存得到的变量放入到工作内存的变量副本中
5.use(使用):作用于工作变量,他将变量交给执行引擎;
6.assign(赋值):作用于工作内存变量,他将执行引擎返回的数据赋值给工作内存中的变量;
7.store(存储):作用于工作内存变量,他将工作内存的变量传给主内存;
8.write(写入):作用于主内存变量,他将从工作内存中获取的变量回写到主内存中;

待续

还没总结完,会继续更新... (因为自己对这块了解的比较少,也是边学习边更新)

相关文章

网友评论

      本文标题:java内存模型

      本文链接:https://www.haomeiwen.com/subject/jodqjctx.html