1.动态程序分析 Dynamic Program Analysis
动态程序分析:根据程序的一次或多次执行的过程与结果,分析代码在时空性能方面所展现出的性质
静态分析:使用抽象的输入值
动态分析:使用具体的输入值
为使动态分析有效,目标程序必须执行足够多次,以观察到完整的、不同的执行行为。
通过分析代码覆盖度,确认动态分析是否已经足够。
要尽可能小的影响程序原本的执行,否则性能测量不准确。
例一:程序热点分析( Hot Spots )
每个程序实体(语句、分支、路径、方法等)的执行概率/频度是多少?
例二:路径分析
一条控制流的执行概率/频度是多少?
2.程序性能分析(Program Profiling):概念与方法
性能分析(Profiling)是一种动态程序分析的形式,衡量程序的时空复杂度,特定指令的使用,或函数调用的频度,时长(hotspots)等。
通过性能分析可以了解:
1.程序的运行时间花在了哪里?(每个方法上花多久时间?程序的哪一部分更慢?)
2.程序流:哪个函数调用了哪个函数,以及其频率
3.每种类型创建类多少个对象?内存消耗是多少?
2.1 分析器 Profiler
程序性能分析通过用profiler测量程序源代码或二进制可执行文件实现。
使用程序运行中收集到的信息,可以用在太大或太复杂,难以通过阅读代码观察的程序。
Profiler的输出:
- 所观察到的程序执行事件的统计结果
测量规模与代码多少成线性关系 - 事件流
并行程序依赖于事件的时间关系,测量规模与指令路径长度成线性关系,可以设定起点和终点来减少输出。 - 实时或周期性的获取/展示程序运行过程中的数据
类型: - Flat profiler
- Call-g