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