对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指的是执行单条指令时需要执行的勾子。
其实关于这种通过字节码注入方式实现性能监测的方法,IBM还有专门的一篇文档介绍:
http://www.ibm.com/developerworks/cn/java/j-jip/#resources
浅析TProfiler性能监测工具
本文详细介绍了TProfiler,一款轻量级、高效的性能监测工具。它通过字节码注入方式实现对Java应用的性能采样,核心原理在于利用JavaAgent及ASM库对指定类进行增强,从而在方法调用前后进行性能指标的收集。文中还提及了IBM在性能监控领域的研究,以及TProfiler与其他性能监控工具的比较。
1万+

被折叠的 条评论
为什么被折叠?



