5

我很想知道是否已经存在一种将 java 方法代码作为输入并确定此类代码的成本函数(循环数、ifs/elses、I/O 和其他常见事物)的方法。我的意思不是以毫秒为单位的确切成本,而是此代码可能导致的一些一般成本。问题是我希望能够让用户编写的任意方法说出这种方法的成本是多少(当然不考虑 JVM 等一些特殊性)。

4

2 回答 2

5

我不知道这样的工具是否存在,但我怀疑它的可行性和可用性:

  • 对于这种工具在一般情况下的可行性,请查看停机问题,这是您所要求的重要部分,并且已被证明是不可判定的。

  • 对于这样一个工具的可用性,我认为静态代码分析本身是没有用的,因为系统性能的很大一部分取决于它的使用模式,即它的输入。

    甚至在运行时对系统进行基准测试也不是直截了当的,这是有原因的。相同的软件在某些情况下速度可能快得惊人,而在其他情况下速度则慢得惊人。

也就是说,有多种代码复杂性分析工具,但这些指标侧重于结构复杂性,这与质量和可维护性有关,而不是性能。

于 2012-08-16T21:57:14.607 回答
1

对于循环数,如果/否则,您可以使用圈复杂度度量。有计算它的工具。例如,JavaNCSS。关于其他事情,你应该决定你对什么感兴趣。有很多软件指标,其中一些可能适合你。如果没有,你可以发明你的并实施它们。比如说,PMD - 另一种收集不同指标的流行工具 - 允许您编写自己的规则。

如果您想自动预测代码的性能,那么您就不走运了。thkala 指出了原因,其他原因包括 JVM JIT 编译和运行时优化。您最好的朋友是分析、(自动)性能测试和算法分析。静态分析可以向您展示一些潜在的性能问题,例如连接字符串或在循环中分配对象。现代 IDE 能够做到这一点。尽管如此,性能主要是由算法和架构决定的,因此在静态分析的方式上几乎不会有太大的改进。

于 2012-08-16T22:09:37.973 回答