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