回覆列表
  • 1 # 使用者57733767485

    例如說,fn()的第一條位元組碼,在Class檔案的裡的放左邊,執行時您找到的放右邊:這個"0xCA" opcode是breakpoint,說明您在fn()的入口處放了個Java層面的斷點。然後dup(0x59)後面那條指令:原本的指令是ldc(0x12),改寫後的指令是HotSpot VM直譯器的內部位元組碼指令_fast_aldc(0xE5),內容也是完全對應的。緊接著後面的一條:

    這個是您眼花了,執行時改寫後的位元組碼還是0x06(您把它看成了0x0B而已).

    有些位元組碼指令的運算元在Class檔案裡跟在執行時看起來不同,是因為HotSpot VM在載入類的時候會對位元組碼做改寫,把某些指令的運算元從常量池下標(constant pool index)改寫為常量池快取下標(constant pool cache index)。這是因為這些指令所需要引用的資訊比一個constant pool entry slot要大,需要另外開一個更大的資料結構來放該常量池項的內容。

  • 中秋節和大豐收的關聯?
  • 什麼是macd,如何運用?