繁体   English   中英

Java内存模型中的“执行跟踪”是什么意思

[英]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
      • 各种特殊和综合动作(例如线程启动/停止等)
    • 对于它应该存储的每个动作:

      • 线程 ID
      • 动作类
      • 它对应于源代码中的什么表达式
      • 对于writevolatile write :写入的值
      • 对于readvolatile read :提供值的write操作
      • for lock/unlock : 显示器被锁定/解锁
      • 与其他动作的各种关系(例如,同步动作的所谓同步顺序中的位置)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM