APM,应用性能监控,有new relic等产品,对APM感兴趣的应该不会不知道它了。主要功能就是统计分析应用的CPU、内存、网络、数据库、UI等性能,并提供错误日志捕获。编码人员需要做的仅仅是使用它提供的插件和jar包,增加一两行代码即可。接下来,本文会以android端的APM为例,分析它到底是用什么技术实现的,涉及到具体相关业务的,只会简单介绍,不作深入分析。
- ASM
ASM是一个字节码操作工具,可以用来改造class。使用方法和介绍可参考官方文档或者AOP 的利器:ASM 3.0 介绍。想要掌握ASM工具的使用,必须对JVM有一定的了解,特别是字节码、操作数栈等相关知识。另外,ASM还提供了一个eclipse插件Bytecode Outline plugin,用来查看字节码。对字节码不熟悉的可以先敲java代码,再用此插件查看对应的字节码。 - dex和processClass方法
既然使用起来很简单,它背后肯定已经帮我们做了很多事了。实际上,APM的插件会在将class编译成dex文件的时候注入相关的代码。比如我想统计某个方法的执行时间,那我只需要在每个调用了这个方法的代码前后都加一个时间统计就可以了。关键点就在于在编译dex文件的时候注入代码。这个编译的过程是由dx(dx.bat)执行的,具体的类和方法是com.android.dx.c