1.动态程序分析
动态程序分析:根据程序一次或多次执行的结果和结果,分析代码在时空性能方面所展现出的性质。
静态分析使用抽象的输入值;动态分析使用具体的输入值。
为使动态分析有效,目标程序必须执行足够多次,以观察到完整的、不同的执行行为;通过代码覆盖度,确认动态分析是否已经足够;要尽可能小的影响程序原本的执行,否则性能测量不准确。
80-20规则:20%的程序负责80%的执行时间。
2.分析方法
分析方法有:
代码注入:在原始程序中加入某些语句来收集运行时数据,这些语句不改变原程序的语义,但对原程序的性能有轻微变化。
采样:以特定的频率观察程序执行的特定时刻所展现出的行为和状态。
借助虚拟机获取程序性能数据。
3.java性能分析工具
命令行分析工具:
jstat:获取JVM的堆使用和GC的性能统计数据;
jmap:输出内存中对象分布情况;

jhat:导出heap dump,浏览/查询其中的对象分布情况;

jstack:获取java线程的stack trace;

Jconsole:JConsole是一个GUI监视工具,它使用JVM上的大量工具来提供有关在Java平台上运行的应用程序的性能和资源消耗的信息。

VisualVM是一个工具,它提供了一个可视化界面,用于查看Java应用程序在JVM上运行时的详细信息

MAT:MAT是内存堆导出文件的分析工具,使用内存分析器分析数亿个对象的生产性堆转储,快速计算保留的对象大小,查看谁阻止垃圾收集器收集对象,运行报告以自动提取泄漏嫌疑人。