對TProfile (https://github.com/taobao/TProfiler)產(chǎn)生了興趣,于是下下來研究了一下:
非常簡單小巧,代碼質(zhì)量也很高,多20個class。其實(shí)現(xiàn)的核心原理是利用javaAgent,在premain函數(shù)中使用java.lang.instrument.ClassFileTransformer,對允許采樣的類生成org.objectweb.asm.ClassAdapter
再利用org.objectweb.asm.MethodAdapter的visitXXX 系列(對應(yīng)功能可到這里查:http://t.cn/SqTMQM,注入采樣代碼,如下
注入方法開始時的采樣代碼
注入方法結(jié)束時的采樣代碼
visitInsn指的是執(zhí)行單條指令時需要執(zhí)行的勾子。