[英]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.