1、关于主内存与工作内存之间的交互协议,即一个变量如何从主内存拷贝到工作内存,如何从工作内存同步到主内存中的实现细节。
2、Java内存模型定义了8种原子操作。
lock: 将一个变量标识为被一个线程独占状态
unclock: 将一个变量从独占状态释放出来,释放后的变量才可以被其他线程锁定
read: 将一个变量的值从主内存传输到工作内存中,以便随后的load操作
load: 把read操作从主内存中得到的变量值放入工作内存的变量的副本中
use: 把工作内存中的一个变量的值传给执行引擎,每当虚拟机遇到一个使用到变量的指令时都会使用该指令
assign: 把一个从执行引擎接收到的值赋给工作内存中的变量,每当虚拟机遇到一个给变量赋值的指令时,都要使用该操作
store: 把工作内存中的一个变量的值传递给主内存,以便随后的write操作
write: 把store操作从工作内存中得到的变量的值写到主内存中的变量
以上就是java内存间交互规则,希望对大家有所帮助。更多Java学习指路:
本教程操作环境:windows7系统、java10版,DELL G3电脑。
育乐教育网还为您提供以下相关内容希望对您有帮助:
一文搞定JMM(java内存模型)
例如,一个变量在写入主内存之前,必须先从工作内存加载或赋值,且同一时间一个锁只能由一个线程持有,解锁操作需先刷新回主内存。原子性是JMM的关键特性,Java的基本类型操作是原子的,但在32位系统中,long和double类型的操作并不具备原子性。可见性则确保了共享变量的修改能够立即被其他线程感知,而有...
Java 内存模型详解
Java内存模型以共享内存为主,每个线程拥有私有本地内存,共享变量则存储在主内存中。线程间的沟通通过Java内存模型(JMM)精确调控,确保本地内存的更新及时同步到主内存,并保证其他线程能够读取到最新的状态。编译器和处理器的重排序行为可能对内存可见性构成挑战,JMM通过一系列规则巧妙地管理这些复杂性,确...
关于JAVA内存模型与MESI协议?
在Java多线程中,每个线程有自己的工作内存,与主存进行交互。虽然这里的工作内存与计算机硬件的缓存类似,但它们各自关注的是不同的领域。内存一致性问题发生在程序层面,当多个线程对共享变量的访问不一致时,而非缓存层面的硬件冲突。因此,理解内存一致性与缓存一致性之间的区别至关重要。MESI与内存一致性...
java中虚拟机的内存到底分为几类呢,网上说法挺多,能不能给个专业的...
不同线程之间无法直接访问对方工作内存中的变量,线程间变量值的传递均需要在主内存来完成,线程、主内存和工作内存的交互关系如下图所示 这里的主内存、工作内存与Java内存区域的Java堆、栈、方法区不是同一层次内存划分。内存间交互操作 关于主内存与工作内存之间的具体交互协议,即一个变量如何从主内存...
深入Java核心 Java内存分配原理精讲
一般Java在内存分配时会涉及到以下区域:◆寄存器:我们在程序中无法控制◆栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中◆堆:存放用new产生的数据◆静态域:存放在对象中用static定义的静态成员◆常量池:存放常量◆非RAM存储:硬盘等永久存储空间Java内存分配中的栈在函数中定义的一些基本...
java里内存是不是有共享数据说法,那真实的物理内存是不是没有共享?_百...
2.真实的物理内存里,一般情况下,数据都是独立存储的;3.系统层面一般是不会采用这种共享数据的方法的。4.Java语言中数据类型包含基本类型和引用类型,你所说的ab是int型,int是java的基础数据类型,基础数据类型没有对象的说法;5.对于引用类型如:String,举个例子String strA = new String("CQUT")...
java string 的内存运算模型,求下面的内存运算,感觉和自己以前了接的...
原理1:当使用任何方式来创建一个字符串对象s时,Java运行时(运行中JVM)会拿着这个X在String池中找是否存在内容相同的字符串对象,如果不存在,则在池中创建一个字符串s,否则,不在池中添加。原理2:Java中,只要使用new关键字来创建对象,则一定会(在堆区或栈区)创建一个新的对象。原理3:...
Java把内存划分为4个部分 1. 代码区 1、栈区 3、堆区 4、静态区%_百度...
Java把内存划分为以下4个部分:1、栈区(stacksegment)—由编译器自动分配释放,存放函数的参数值,局部变量的值等,具体方法执行结束之后,系统自动释放JVM内存资源。2、堆区(heapsegment)—一般由程序员分配释放,存放由new创建的对象和数组,jvm不定时查看这个对象,如果没有引用指向这个对象就回收。3...
java中什么是堆和栈,如何应用,最好举个例子,并详细地说明一下,谢谢了...
Java把内存划分成两种:一种是栈内存,一种是堆内存。 在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。 当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。 堆...
主内存与java内存区域(堆,方法区)有什么区别
JAVA的JVM的内存可分为3个区:堆(heap)、栈(stack)和方法区(method)堆区:1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身 栈区:1.每个线程包含一个栈区,栈中...