Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法确定任意java方法的一般代价函数?_Java - Fatal编程技术网

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

有没有办法确定任意java方法的一般代价函数?,java,Java,我很想知道是否已经存在一种将java方法代码作为输入并确定此类代码的代价函数(循环数、ifs/ELSE、I/O和其他常见事物)的方法。 我的意思不是用ms表示的确切成本,而是这个代码可能导致的一些一般成本。 问题是,我希望用户编写的任意方法能够说明这种方法的成本(当然没有考虑JVM等一些特殊性)。我不知道是否存在这样的工具,但我怀疑它的可行性和可用性: 对于这种工具在一般情况下的可行性,请查看,这是您要求的一个重要部分,并且已被证明是 对于这种工具的可用性,我认为静态代码分析本身是无用的,因为

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

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

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

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

    有一个原因是,即使在运行时对系统进行基准测试也不是直接的;同样的软件在某些情况下速度惊人,在另一些情况下速度惊人


也就是说,有,但这些度量关注的是结构复杂度,它与质量和可维护性的关系比性能更大。

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


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

这个问题涉及到静态分析中的一个深层次问题,通常情况下,解决方案是非常近似的,它们可能不适用于您关心的情况(阅读,静态分析很难)。如果你能提供更多的背景知识来解释你为什么想要这样做,你可能会得到关于你可以使用的工具的更精确的答案。许多超级酷的算法需要相当复杂的技术来证明它们的渐进复杂性。仅从代码中执行是不可能的。谢谢大家!是的,我知道结构的复杂性不会给我真正的成本,但我想从那里开始,然后看看我还需要考虑什么。我将研究这些链接,看看我能做些什么。