我試圖用ASM計數單一功能內執行,以建立一個直方圖個人字節碼指令。我看到有一個工具ByCounter可以執行類似的任務 - 但我無法訪問源代碼。的Java計算單個字節碼指令執行
我的理解是Java字節碼的ASM庫可以儀器類,字段,方法,但它的實例插裝一個單獨的字節碼指令都沒有被發現(雖然從ByCounter - 它被認爲是可能的)。
如果像JVMTI工具更適合,那麼這也是有用的信息!
感謝您的幫助!
我試圖用ASM計數單一功能內執行,以建立一個直方圖個人字節碼指令。我看到有一個工具ByCounter可以執行類似的任務 - 但我無法訪問源代碼。的Java計算單個字節碼指令執行
我的理解是Java字節碼的ASM庫可以儀器類,字段,方法,但它的實例插裝一個單獨的字節碼指令都沒有被發現(雖然從ByCounter - 它被認爲是可能的)。
如果像JVMTI工具更適合,那麼這也是有用的信息!
感謝您的幫助!
這是那種我對做Jawa愚蠢的事情。例如:
from collections import Counter
from jawa.cf import ClassFile
import pandas
with open('tests/data/HelloWorldDebug.class', 'rb') as fin:
cf = ClassFile(fin)
method = cf.methods.find_one(name='<init>')
ins = Counter(i.mnemonic for i in method.code.disassemble())
df = pandas.DataFrame.from_dict(ins, orient='index')
fig = df.plot(kind='bar').get_figure()
fig.savefig('example.png')
你有什麼計劃使用這些信息?如果你試圖分析或優化程序,那麼字節碼並不是JIT最終會運行的 - 它會在運行時將一切完全不同的本地代碼重寫。 –
你不能只是訪問方法的['instructions'(http://asm.ow2.org/asm50/javadoc/user/org/objectweb/asm/tree/MethodNode.html#instructions),並檢查[' size'](http://asm.ow2.org/asm50/javadoc/user/org/objectweb/asm/tree/InsnList.html#size--)? –
@LouisWasserman我想查看在不同代碼路徑的方法中執行了多少條指令。我同意這是一個不完美的方法,但它是開始獲得一些基準指標。 – Mike