我打印出一個簡單 java 程序的執行字節碼,并注意到一些 java 指令是 fast_xxxx 而不是正常指令。我在 JVM 規范中找不到任何相關信息。那么這些指令之間到底有什么區別以及解釋器何時/為什么選擇使用這些指令呢?編輯:字節碼是用-XX:TraceBytecodes選項打印的。
1 回答

天涯盡頭無女友
TA貢獻1831條經驗 獲得超9個贊
那么這些指令之間到底有什么區別呢?
簡而言之:fast_
變體是優化的架構相關指令替換
這些優化從何而來?
JVM 模塊解釋器。它可以在非補丁和補丁模式下工作。一些相關的 JVM 選項:
RewriteBytecodes
- 允許重寫字節碼
RewriteFrequentPairs
- 將常用的字節碼對重寫為單個字節碼
- 包含一些快速字節碼的定義(參見參考資料?Bytecodes::initialize()
),其中一組快速字節碼被定義。此外,可以在依賴于平臺的代碼區域中定義快速字節碼。重寫的字節碼依賴于架構。好吧,至少,其中一些是,而另一些則不是。
口譯員什么時候/為什么選擇使用這些?
JVM 具有重寫字節碼流的能力,例如組合通用指令對。至少大多數(如果不是全部)到fast_
版本的字節碼轉換只是為了性能而完成的,并且可以被禁用。這樣做會影響口譯員的表現。
添加回答
舉報
0/150
提交
取消