我很想知道是否已经存在一种将java方法代码作为输入并确定此类代码(循环数,ifs/elses,I/O和其他常见事物)的代价函数的方法。 我的意思不是确切的成本在毫秒,但一些一般的代价可能会导致此代码。 事情是,我想能够为用户写入的任意方法说什么可以是这种方法的成本(当然不考虑像JVM等特殊性)。有没有办法确定任意java方法的一般成本函数?
回答
我不知道这样的工具存在,但我怀疑它的可行性和实用性都:
对于在一般情况下,这种工具的可行性,看看在Halting problem,这是你要求的重要组成部分,并已被证明是undecidable。
对于这样的工具的可用性,相信自身的静态代码分析是没用的,因为系统的性能的显著部分取决于其输入其使用模式,即。
有一个原因,即使在运行时的基准测试系统都不是直接的;在某些情况下,相同的软件可能会非常快,而在其他软件中则会惊人地慢。
这就是说,有several tools for code complexity analysis,但这些指标围绕结构复杂性,这更多地涉及质量和可维护性比性能。
对于循环次数,如果/ elses可以使用圈复杂性度量。有工具可以计算它。例如,JavaNCSS。关于其他事情,你应该决定你对什么感兴趣。有很多software metrics,其中一些可能适合你。如果没有,你可以发明你的并实施它们。说,PMD - 另一个收集不同指标的流行工具 - 允许您编写自己的规则。
如果你想自动预测你的代码的性能,那么你是运气不好。理由由thkala指出,其他原因包括JVM JIT编译和运行时优化。这里您最好的朋友是分析,(自动)性能测试和算法分析。静态分析可以显示一些潜在的性能问题,如连接字符串或在循环中分配对象。现代的IDE能够做到这一点。尽管如此,性能主要取决于算法和体系结构,所以在静态分析方面几乎不会有太多改进。
谢谢你们!是的,我知道结构复杂性不会给我真正的成本,但我想从那里开始,然后看看我还需要考虑什么。我会研究这些链接,看看我能做些什么。 – kepha 2012-08-16 22:22:44
- 1. 有没有办法一般地用Moq模拟DbSet.Find方法?
- 2. 有没有办法挂钩Java方法?
- 3. 有没有办法通过引用将成员函数传递给方法? [JAVA]
- 4. 有没有办法使C中的任意一个仲裁函数超时?
- 5. 有没有办法确定JavaScript函数是否有副作用?
- 6. 有没有办法确定Xcode4中未使用的函数?
- 7. 有没有办法将任意文本传递给Vim?
- 8. 有没有办法确定java中有多大的对象?
- 9. 有没有办法替换C++中的方法中的函数
- 10. 有没有办法强制一些方法的类没有指定参数?
- 11. 将任意方法应用于所有子目标的一般方法?
- 12. Android/Java:有没有办法存储一个方法?
- 13. 有没有办法将一个方法绑定到ListBox的DataTemplate?
- 14. ,有没有办法在运行时确定类的成员?
- 15. 有没有办法确定任务是否被重新分配?
- 16. 有没有办法用函数“find”实现通配符方法?
- 17. 有没有办法在jQuery中永久定义一个函数?
- 18. 有没有办法在matlab中定义一个通用函数?
- 19. 有没有办法在python中自动定义一个函数?
- 20. 有没有一种方法来确定在Java方法中使用的变量?
- 21. 有没有办法将控制器方法指向任意视图?
- 22. 有没有办法确定未使用的数据绑定
- 23. 有没有办法锁定PHPUnit版本?
- 24. 有没有办法运行ajaxSetup中定义的第一个基本函数?
- 25. 有没有办法指定一个Scala函数文本的返回类型?
- 26. 有没有办法确定一个类是Java中的一个实例?
- 27. 有没有办法确定共享库的导出符号的函数参数?
- 28. 有没有办法确定Java System.in是否是“交互式”?
- 29. 有没有办法引用Kotlin顶级函数的Java类?
- 30. 有没有办法在java中的父类中调用函数?
这个问题涉及静态分析中的一个深层问题,一般来说解决方案将如此近似,它们可能不适用于您关心的案例(请阅读,静态分析很难)。如果您对*为什么*要多一些背景知识,那么您可以针对您可以使用的工具获得更精确的答案。 – 2012-08-16 22:12:28
许多超酷的算法都需要相当复杂的技术来证明其渐近复杂性。仅从代码中完成这一切都是不可能的。 – 2012-08-16 22:35:48