复杂度分析
复杂度分析视图允许你根据所选方法的方法参数来研究其算法复杂度。
要想重新了解大O符号的细节,推荐阅读算法复杂度介绍 和常见算法的复杂度比较指南。
首先,你必须选择一个或多个应该被监控的方法。
对于每个方法,你可以输入一个脚本,其类型为long
的返回值被用作当前方法调用的复杂度。
例如,如果一个类型为java.util.Collection
的方法参数名为inputs
,
脚本可以是inputs.size()
。
复杂度记录与CPU记录无关。你可以直接在复杂度分析视图中启动和停止复杂度记录, 或者使用记录分析或触发器操作。 在停止记录后,会显示一个结果图,在X轴上绘制复杂度,Y轴上绘制执行时间。为了减少内存需求, JProfiler可以将不同的复杂度和执行时间合并到共同的桶中。顶部的下拉菜单允许你在不同的配置方法之间进行切换。
该图是一个气泡图,其中每个数据点的大小与其中的测量量成正比。如果所有的测量值都是截然不同的,你会看到一个规则的散点图。 在另一种极端情况下,如果所有的方法调用都具有相同的复杂性和执行时间,你将只会看到一个大圆。
如果至少有3个数据点,就会显示一个具有共同复杂度的曲线拟合。JProfiler会尝试几种常见复杂度的曲线拟合, 并首先向你显示最佳拟合。曲线拟合的下拉菜单允许你也显示其他曲线拟合模型。 曲线拟合的描述中嵌入的R2值向你展示了拟合的好坏。 下拉列表中的模型是按照R2 值降序排列的,所以最好的模型永远是第一项。
请注意,R2可以是负值,因为它只是一个符号,而不是真正的平方,负值表示比常数线拟合更差。 常数线拟合的R2值总是为0,完美拟合的R2值为1。
你可以通过在导出对话框中选择"属性"选项,导出当前显示的拟合参数。 对于质量保证环境下的自动分析,命令行导出也支持属性格式。