常用 Java Profiling 工具的分析与比较
2010-08-13 00:00:00 来源:WEB开发网在 Java 程序的开发过程中,不可避免地会遇到内存使用、性能瓶颈等问题。Java Profiler 工具能帮助开发人员快速、有效地定位这些问题,因此成为了 Java 开发过程中的一个重要工具。目前市场上的 Java Profiler 工具种类繁多,本文将对目前比较常见的几种工具进行简要介绍,并从功能、性能等角度作比较,从而帮助 Java 程序员选择合适的 Java Profiler 工具。
本文主要分为三个部分:第一部分简要介绍 Java Profiler 工具的原理;第二部分对目前常见的 Java Profiler 工具 TPTP, CodePro Profiler, YourKit Java Profiler, JProfiler 进行简要介绍;第三部分对以上工具从不同的角度进行比较,帮助开发人员选择合适的工具。
相对于静态代码分析,Profiling 是通过收集程序运行时的信息来研究程序行为的动态分析方法。其目的在于定位程序需要被优化的部分,从而提高程序的运行速度或是内存使用效率。收集程序运行时信息的方法主要有以下三种:
事件方法:对于 Java,可以采用 JVMTI(JVM Tools Interface)API 来捕捉诸如方法调用、类载入、类卸载、进入 / 离开线程等事件,然后基于这些事件进行程序行为的分析。
统计抽样方法(sampling): 该方法每隔一段时间调用系统中断,然后收集当前的调用栈(call stack)信息,记录调用栈中出现的函数及这些函数的调用结构,基于这些信息得到函数的调用关系图及每个函数的 CPU 使用信息。由于调用栈的信息是每隔一段时间来获取的,因此不是非常精确的,但由于该方法对目标程序的干涉比较少,目标程序的运行速度几乎不受影响。
植入附加指令方法(BCI): 该方法在目标程序中插入指令代码,这些指令代码将记录 profiling 所需的信息,包括运行时间、计数器的值等,从而给出一个较为精确的内存使用情况、函数调用关系及函数的 CPU 使用信息。该方法对程序执行速度会有一定的影响,因此给出的程序执行时间有可能不准确。但是该方法在统计程序的运行轨迹方面有一定的优势。
更多精彩
赞助商链接