色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

8下如何查看JVM里Java應用的字節碼

謝彥文2年前15瀏覽0評論

8下如何查看JVM里Java應用的字節碼?

作者:RednaxelaFX鏈接:https://www.zhihu.com/question/51423993/answer/125869628來源:知乎著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

您找到的運行時字節碼看起來跟原本的字節碼挺吻合的啊。您找的地方就對了。Oracle JDK 8 / OpenJDK 8的HotSpot VM還是把字節碼放在ConstMethod對象的末尾的。

例如說,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要大,需要另外開一個更大的數據結構來放該常量池項的內容。

java字符串字節,8下如何查看JVM里Java應用的字節碼