Java内存模型解析

Posted AJimmyFang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java内存模型解析相关的知识,希望对你有一定的参考价值。

一.java内存模型的诞生原因以及作用

  1.诞生原因

    java虚拟机中规范定义的一种内存模型,来屏蔽调各种硬件和操作系统之间的内存访问差异,为了实现java程序在各种平台都能达到一致的内存访问效果。这是它诞生的缘由。

  2.作用

    其实这个内存模型主要就是去定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出来的底层细节,这里的变量,是指实例字段,静态字段,数组等,不包括局部变量和方法参数。

二.内存模型概述

  1.主内存

    所以的变量都存在主内存,这里的内存也就是虚拟机的内存,就是虚拟机在运行时,系统分给虚拟机的内存。

  2.工作内存

    工作内存保存了该线程使用到的变量的主内存副本拷贝,线程对变量的操作必须在工作内存内进行.

                                                     

   3.内存间的交互操作

    lock(锁定):作用于主内存的变量,把一个变量标识为一条线程独占的状态。

    unlock(解锁):释放锁定的变量,这时才可以被其他线程锁定。

    read(读取):主内存读到工作内存。

    load(加载):把从主内存中的获取的变量放入工作内存的变量副本中。

    use(使用):把工作内存的变量加载到执行引擎,当虚拟机遇到一个需要使用变量的字节码的指令时会用到。

    assign(赋值):执行引擎到工作内存。

    store(存储):工作内存传到主内存。

    write(写入):把store传入来的变量放在主内存的变量里。

  4.内存交互操作的规则  

       1.read和load,store和write必须顺序执行,不一定连续执行。

       2.工作内存assign了,值改变了,不能不同步会主内存

    3.没有assign不能返回主内存.

    4.实施use,store之前,要执行assign,和load

    5.一个变量同一时刻只能允许一条线程对其进行lock操作,但是lock可以被同一条线程执行多次。

    6.如果对一个变量进行lock,那么就清空工作内存的值,执行引擎要使用时要重新load和assign(load和assign会引起变量的更新)。

    7.变量没有被lock,不能执行unlock。

    8.执行unlock,要先store和write同步变量回主内存。

以上是关于Java内存模型解析的主要内容,如果未能解决你的问题,请参考以下文章

全网最硬核 Java 新内存模型解析与实验 - 1. 什么是 Java 内存模型

全网最硬核 Java 新内存模型解析与实验

Java虚拟机解析篇之---内存模型

Java 并发编程解析 | 如何正确理解Java领域中的内存模型,主要是解决了什么问题?

全网最硬核 Java 新内存模型解析与实验 - 4. Java 新内存访问方式与实验

全网最硬核 Java 新内存模型解析与实验 - 4. Java 新内存访问方式与实验