首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java内存模型中“执行跟踪”意味着什么

在Java内存模型中“执行跟踪”意味着什么
EN

Stack Overflow用户
提问于 2022-07-18 11:22:09
回答 1查看 91关注 0票数 5

语言规范中专门用于Java (链接)的部分经常提到“执行跟踪”。

例如,从一开始:

内存模型描述了给定程序和该程序的执行跟踪,执行跟踪是否是程序的合法执行。Java语言内存模型的工作方式是检查执行跟踪中的每个读取,并根据特定规则检查该读取所观察到的写入是否有效。

但我找不到这个词的任何描述/定义。

那么,根据JMM,什么是“执行跟踪”,它到底由什么组成?

最欢迎在语言规范文本中引用特定的地方。

EN

回答 1

Stack Overflow用户

发布于 2022-07-18 19:15:12

这不是一个完整的答案,但我认为这是值得一提的.

即使我们不知道“执行跟踪”在细节上是什么,我们也可以推断出它应该提供哪些信息。

让我们读一下17.4.记忆模型的第一段

内存模型描述了给定的程序和该程序的执行跟踪,该执行跟踪是否是程序的合法执行。Java编程语言内存模型的工作方式是检查执行跟踪中的每个读,并根据一定的规则检查该读所观察到的写入是否有效。

这意味着“程序”(即源代码)和“执行跟踪”应该提供确定程序执行是否合法所需的所有信息。

这些信息用17.4.6.处决来描述。

我不会把它复制粘贴在这里,因为太长了。

我试着用简单的话来解释它:

  • 程序由语句组成,每条语句都由(可能是嵌套的)表达式按某种顺序计算。
  • 线程的执行可以表示为操作序列:每个简单表达式一个动作。
  • 程序的执行是几个并行执行的线程。
  • 执行跟踪应该提供有关在程序执行期间执行的操作的信息,也就是说,它应该提供以下信息:
    • 所有已执行的操作:每个线程的操作序列 注意: JMM只关心所谓的线程间操作(17.4.2.行为): 线程间操作是一个线程执行的可以被另一个线程检测或直接影响的动作。

线间动作种类:

代码语言:javascript
复制
    - `read/write`
    - `volatile read/write`
    - `lock/unlock`
    - various special and synthetic actions (e.g. thread start/stop, etc.)
代码语言:javascript
复制
- for every action it should store:
代码语言:javascript
复制
    - thread id
    - action kind
    - what expression in the source code it corresponds to
    - for `write` and `volatile write`: the written value
    - for `read` and `volatile read`: the `write` action, which provided the value
    - for `lock/unlock`: the monitor being locked/unlocked
    - various relations with other actions (e.g. position in a so-called synchronization order for synchronization actions)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73021540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档