對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指的是執行單條指令時需要執行的勾子。
原文轉自:http://www.kuqin.com/testing/20120921/331194.html