Java Volatile变量读取:谁执行taks JVM或OS?

Java Volatile变量读取:谁执行taks JVM或OS?,java,jvm,Java,Jvm,当易失性变量读取时,缓存/寄存器数据被刷新,直接从RAM(主存)进行读取-这称为读取屏障 Qs 谁执行上述任务,JVM还是OS? 这些缓存/寄存器是堆栈/堆的一部分 还有一个问题: 堆由JVM管理(由OS管理)? Java堆栈由操作系统(而不是JMV)管理?这当然取决于机器的硬件。在某些机器上,它也可能取决于操作系统。但我相信现在所有的普通处理器都有用户模式代码的指令,可以用来实现内存一致性;操作系统不需要参与 关于血淋淋的细节,我解释得比我好得多,请参阅中关于“记忆障碍”的部分 值得澄清的是

当易失性变量读取时,缓存/寄存器数据被刷新,直接从RAM(主存)进行读取-这称为读取屏障

Qs 谁执行上述任务,JVM还是OS?
这些缓存/寄存器是堆栈/堆的一部分


还有一个问题:
堆由JVM管理(由OS管理)?

Java堆栈由操作系统(而不是JMV)管理?

这当然取决于机器的硬件。在某些机器上,它也可能取决于操作系统。但我相信现在所有的普通处理器都有用户模式代码的指令,可以用来实现内存一致性;操作系统不需要参与

关于血淋淋的细节,我解释得比我好得多,请参阅中关于“记忆障碍”的部分


值得澄清的是,所需的操作(通常)实际上不是对主存的刷新或从主存读取。确保所有处理器内核的缓存彼此一致就足够了,即使它们还没有与主内存一致。这通常更容易实现。

JVM负责实现语言规范(包括定义易失性变量工作方式的内存模型)

正如其名称所示,JVM是一个虚拟环境,它将实际环境(OS/cpu)抽象出来,这样开发人员就不需要关心程序在哪里运行来编写正确的代码


实际上,JVM在OS/cpu上运行,并使用OS/cpu的适当命令来执行程序,例如通过发出内存障碍。

每个帖子一个问题您的猜测都是错误的。线程之间的内存一致性必须在CPU级别处理,JVM为此使用OS函数或直接使用指令来实现其内存模型的语义。这不是非此即彼的事情,只是不同层次的抽象。@同意,但这些只是一行或几行answer@Naroji这不是一种分歧吗?而且,萨米是对的。综合问题,无论多么简单,都是不好的。如果你的问题是一行的,那可能意味着问题本身质量很低。(例如,你应该用谷歌搜索。)好的,我把它分成两个不同的问题