[英]What does "execution trace" mean in Java Memory Model
专用于 Java 内存模型 (JMM) ( 链接) 的语言规范部分多次提到“执行跟踪”。
例如,从一开始:
给定程序和该程序的执行轨迹,内存模型描述该执行轨迹是否是程序的合法执行。 Java 编程语言内存模型的工作原理是检查执行跟踪中的每次读取,并根据某些规则检查读取观察到的写入是否有效。
但我找不到该术语的任何描述/定义。
那么,究竟什么是 JMM 中的“执行跟踪”,它究竟由什么组成呢?
欢迎参考语言规范文本中的特定位置。
你是对的; 这不是很清楚。 他们也将其称为“程序跟踪”,并简单地称为“跟踪”。
以下是引用:
例如,考虑表 17.4-A 中显示的示例程序跟踪。
表 17.4-A。
线程 1 线程 2 B = 1; A = 2; r2 = A; r1 = B;
因此,它只是每个线程的语句的有序列表,表示语句执行方式的一种可能排列(因为语句可能被重新排序)。 JMM 内的跟踪可能有效也可能无效; 它们被用来举例说明什么是合法的,什么是不合法的。
这不是一个完整的答案,但我认为这值得一提。
即使我们不知道详细的“执行跟踪”是什么,我们也可以推断出它应该提供哪些信息。
让我们阅读17.4 的第一段。 内存模型:
给定程序和该程序的执行轨迹,内存模型描述该执行轨迹是否是程序的合法执行。 Java 编程语言内存模型的工作原理是检查执行跟踪中的每次读取,并根据某些规则检查读取观察到的写入是否有效。
这意味着“程序”(即源代码)和“执行跟踪”应该提供确定程序执行是否合法所需的所有信息。
该信息在17.4.6 中描述。 处决。
我不会在这里复制粘贴它,因为它太长了。
我将尝试用简单的语言来解释它:
所有执行的动作:每个线程的一系列动作
注意:JMM 只关心所谓的线程间操作( 17.4.2. Actions ):
线程间动作是由一个线程执行的可以被另一个线程检测或直接影响的动作
线程间动作种类:
read/write
volatile read/write
lock/unlock
对于它应该存储的每个动作:
write
和volatile write
:写入的值read
和volatile read
:提供值的write
操作lock/unlock
: 显示器被锁定/解锁
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.