【软件构造】8.4 动态性能分析方法与工具

本文探讨了动态程序分析的概念,强调了在分析程序时空性能方面的重要性。介绍了程序性能分析(Profiling)及其应用,如热点分析和路径分析。详细阐述了Profiler的类型和分析方法,包括代码注入、采样和虚拟机监控。同时,文章列举了多种Java性能分析工具,如jstat、jmap、jhat、jcmd和Eclipse Memory Analyzer (MAT),并详解了它们的功能和应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.动态程序分析 Dynamic Program Analysis

动态程序分析:根据程序的一次或多次执行的过程与结果,分析代码在时空性能方面所展现出的性质
静态分析:使用抽象的输入值
动态分析:使用具体的输入值
为使动态分析有效,目标程序必须执行足够多次,以观察到完整的、不同的执行行为。
通过分析代码覆盖度,确认动态分析是否已经足够。
要尽可能小的影响程序原本的执行,否则性能测量不准确。
例一:程序热点分析( Hot Spots )
每个程序实体(语句、分支、路径、方法等)的执行概率/频度是多少?
例二:路径分析
一条控制流的执行概率/频度是多少?

2.程序性能分析(Program Profiling):概念与方法

性能分析(Profiling)是一种动态程序分析的形式,衡量程序的时空复杂度,特定指令的使用,或函数调用的频度,时长(hotspots)等。
通过性能分析可以了解:
1.程序的运行时间花在了哪里?(每个方法上花多久时间?程序的哪一部分更慢?)
2.程序流:哪个函数调用了哪个函数,以及其频率
3.每种类型创建类多少个对象?内存消耗是多少?

2.1 分析器 Profiler

程序性能分析通过用profiler测量程序源代码或二进制可执行文件实现。
使用程序运行中收集到的信息,可以用在太大或太复杂,难以通过阅读代码观察的程序。
Profiler的输出:

  1. 所观察到的程序执行事件的统计结果
    测量规模与代码多少成线性关系
  2. 事件流
    并行程序依赖于事件的时间关系,测量规模与指令路径长度成线性关系,可以设定起点和终点来减少输出。
  3. 实时或周期性的获取/展示程序运行过程中的数据
    类型:
  4. Flat profiler
  5. Call-g
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值