簡體   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