1
JVM如何確保跳轉指令(jsr
和goto
)跳轉到指令而不是數據或指令參數?JVM字節碼跳轉指令
JVM如何確保跳轉指令(jsr
和goto
)跳轉到指令而不是數據或指令參數?JVM字節碼跳轉指令
這是字節碼驗證器的一部分。
在Java字節碼中,指令都具有已知長度,並且必須從偏移量0開始一個接一個地出現,因此您可以始終靜態地告訴每條指令的開始位置。因此,確保跳轉目標是有效指令的開始只是一件簡單的事情。與Dalvik或x86不同,您不允許跳到指令的中間。
You can find the source code for the verifier here.實際上有兩個驗證者。這是經典的更精細的代碼,它沒有StackMapTable(這包括所有包含jsr
的代碼)。