1.动态程序分析
动态程序分析:根据程序一次或多次执行的结果和结果,分析代码在时空性能方面所展现出的性质。
静态分析使用抽象的输入值;动态分析使用具体的输入值。
为使动态分析有效,目标程序必须执行足够多次,以观察到完整的、不同的执行行为;通过代码覆盖度,确认动态分析是否已经足够;要尽可能小的影响程序原本的执行,否则性能测量不准确。
80-20规则:20%的程序负责80%的执行时间。
2.分析方法
分析方法有:
代码注入:在原始程序中加入某些语句来收集运行时数据,这些语句不改变原程序的语义,但对原程序的性能有轻微变化。
采样:以特定的频率观察程序执行的特定时刻所展现出的行为和状态。
借助虚拟机获取程序性能数据。
3.java性能分析工具
命令行分析工具:
jstat:获取JVM的堆使用和GC的性能统计数据;
jmap:输出内存中对象分布情况;
![](https://i-blog.csdnimg.cn/blog_migrate/285bf42ddf5f2216b962124966749b8f.png)
jhat:导出heap dump,浏览/查询其中的对象分布情况;
![](https://i-blog.csdnimg.cn/blog_migrate/8f8c465f0c64b1e8587c11516441f348.png)
jstack:获取java线程的stack trace;
![](https://i-blog.csdnimg.cn/blog_migrate/d4d3a052affa53a44efda05cd847c72e.png)
Jconsole:JConsole是一个GUI监视工具,它使用JVM上的大量工具来提供有关在Java平台上运行的应用程序的性能和资源消耗的信息。
![](https://i-blog.csdnimg.cn/blog_migrate/18295e80cb66272d8184e787fe219439.png)
VisualVM是一个工具,它提供了一个可视化界面,用于查看Java应用程序在JVM上运行时的详细信息
![](https://i-blog.csdnimg.cn/blog_migrate/8716a86cbef8c89e81a1dd1b63c5da73.png)
MAT:MAT是内存堆导出文件的分析工具,使用内存分析器分析数亿个对象的生产性堆转储,快速计算保留的对象大小,查看谁阻止垃圾收集器收集对象,运行报告以自动提取泄漏嫌疑人。