java架构师培训-Java内存模型的应用介绍

2021年04月07日 17:04

39

    Java内存模型(即JavaMemoryModel,简称JMM)本身是一种抽象的概念,实际上并不存在。它描述了一组规则或规范,通过这些规则或规范定义了程序中各种变量(包括实例字段,静态字段和构成数组对象的元素)的访问方法。


    Java内存模型的主要目标是定义程序中每个变量的访问规则,即如何在虚拟机中的内存中存储和删除变量。这里的变量不包括局部变量和方法参数,因为它们是线程专用的,并且不会共享,因此不存在竞争问题。由于JVM运行程序的实体是一个线程,因此在创建每个线程时,JVM都会为其创建一个工作内存(在某些地方称为堆栈空间)以存储线程专用数据,并且Java内存模型规定所有变量存储在主内存中,主内存是一个共享内存区域,所有线程都可以访问该区域,但是线程对变量的操作(读取分配等)必须在工作内存中执行。首先,必须将变量从主内存复制到其自己的工作内存空间,然后对变量进行操作。操作完成后,变量将被写回到主存储器。主存储器中的变量不能直接操作。主存储器中变量的副本存储在工作存储器中。如前所述,工作内存用于每个线程。因此,不同的线程无法访问彼此的工作内存。线程之间的通信(值传递)必须通过主存储器完成。下图显示了线程,主内存和工作内存之间的关系。


   java架构师培训


    在弄清了主存储器和工作存储器之后,让我们看一下主存储器和工作存储器的数据存储类型和操作模式。根据虚拟机规范,对于实例对象中的成员方法,如果该方法包含局部变量,则它是基本数据。将存储类型(布尔,字节,short,char,int,long,float,double)直接在工作存储器的框架堆栈结构中,但是如果局部变量是引用类型,则变量的引用将存储在功能存储器中。在框架堆栈中,对象实例将存储在主存储器中(共享数据区,堆)。但是对于实例对象的成员变量,无论是基本数据类型还是打包类型(Integer,Double等)还是引用类型,它都将存储在堆区域中。至于类本身的静态变量和相关信息,则将其存储在主存储器中。应该注意的是,主存储器中的实例对象可以被多个线程共享。如果两个线程同时调用同一对象的相同方法,则两个线程会将要操作的数据复制到它们自己的工作内存中。在操作完成后,将刷新主存储器。


 推荐阅读:java架构师培训:java最佳测试框架JBehave的基本介绍


更多鲁班学院java高级培训免费课程试听地址https://www.lubanjava.com/course.html

鲁班学院java高级培训课程https://www.lubanjava.com/course/detail/519.html

加群即可领取鲁班学院最新Java高级培训课程资料学习包 群号:700541970


咨询(2)
免费试听
领取优惠
加群交流

扫一扫
加群领取架构师资料

售后反馈
返回顶部