Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 物理设备上的线程工作副本是什么/在哪里_Java_Multithreading_Concurrency_Java 14 - Fatal编程技术网

Java 物理设备上的线程工作副本是什么/在哪里

Java 物理设备上的线程工作副本是什么/在哪里,java,multithreading,concurrency,java-14,Java,Multithreading,Concurrency,Java 14,从java: 每个线程都有一个工作内存,它在内存中保存自己必须使用或分配的变量的工作副本。当线程执行程序时,它对这些工作副本进行操作。主存储器包含每个变量的主副本。关于何时允许或要求线程将变量的工作副本的内容传输到主副本或反之亦然,有一些规则 “线程工作副本”是什么/在哪里?它们是指CPU缓存还是RAM 我困惑的原因: 在本章中,动词使用、分配、加载、存储、锁定和解锁线程可以执行的名称操作。动词读取、写入、锁定和解锁主存子系统可以执行的名称操作 他们是否使用汇编代码引用这些说明 注意:我知道规范

从java:

每个线程都有一个工作内存,它在内存中保存自己必须使用或分配的变量的工作副本。当线程执行程序时,它对这些工作副本进行操作。主存储器包含每个变量的主副本。关于何时允许或要求线程将变量的工作副本的内容传输到主副本或反之亦然,有一些规则

“线程工作副本”是什么/在哪里?它们是指CPU缓存还是RAM

我困惑的原因:

在本章中,动词使用、分配、加载、存储、锁定和解锁线程可以执行的名称操作。动词读取、写入、锁定和解锁主存子系统可以执行的名称操作

他们是否使用汇编代码引用这些说明

注意:我知道规范很旧,我将这个问题标记为Java14。我这样做是因为这个结构仍然成立

编辑:

我创建了下面的图像,它可以被标记为正确的吗


这就是我所理解的。如果以下图像有任何错误,请发表评论:

工作副本是一种逻辑结构,而不是物理结构

每个线程的完整数据都将在RAM中找到,其中的一部分可能作为副本存在于CPU缓存中,也可能不作为副本存在于CPU缓存中,这取决于CPU上次需要它们的时间。

工作副本是一个逻辑结构,而不是物理结构


每个线程的完整数据都将在RAM中找到,其中的一部分可能作为副本存在于CPU缓存中,也可能不作为副本存在于CPU缓存中,这取决于CPU上次需要它们的时间。

事实是,进入RAM和CPU缓存的内容不受软件的控制。CPU决定了什么去哪里。软件能做的最好的事情就是在本地保存尽可能少的东西,这样数据就很有可能被缓存。这是有道理的。谢谢费德里科。事实上,进入RAM和CPU缓存的东西是软件无法控制的。CPU决定了什么去哪里。软件能做的最好的事情就是在本地保存尽可能少的东西,这样数据就很有可能被缓存。这是有道理的。谢谢Federico。值也可以保存在CPU寄存器中。此外,值只能由程序位置暗示。最值得注意的是,布尔值可以由程序执行的分支暗示,因此无需在分支内重新读取该值。值也可以保存在CPU寄存器中。此外,值只能由程序位置暗示。最值得注意的是,布尔值可以由程序执行的分支暗示,因此无需在分支内重新读取该值。