有没有办法确定任意java方法的一般成本函数?

时间:2012-08-16 21:54:10

标签: java

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

2 个答案:

答案 0 :(得分:5)

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

  • 对于这种工具在一般情况下的可行性,请查看Halting problem,这是您要求的重要部分,并且已被证明是undecidable

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

    甚至运行时的基准测试系统也不是直截了当的;相同的软件在某些情况下可能会非常快,而在其他情况下则会非常慢。

尽管如此,有several tools for code complexity analysis,但这些指标侧重于结构复杂性,这与质量和可维护性相关,而不是性能。

答案 1 :(得分:1)

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

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