我想知道我的代码的哪些行正在使用大部分时间执行。我正在做一个计划程序算法,为了解决我所做的具体问题,计算机需要5分钟才能找到解决方案。
我使用了很多递归方法,我想知道浪费的时间最多,所以我可以查看这些行并尝试修复或重构代码以查看它是否有帮助。
我知道有Cyclomatic Complexity Methods。但我不知道如何在Eclipse上使用它。我正在使用Helios。试图安装metrics2,它只是在我的Eclipse上弹出错误。
编辑:更新的问题:
http://s7.postimg.org/frd8yjql5/diag.png 这意味着什么?看看堆大小..总是上下..这会影响CPU速度吗?谢谢!
答案 0 :(得分:4)
我想知道我的代码的哪些行正在使用大部分时间执行。
使用分析器运行代码。 Eclipse具有分析支持,但我建议使用作为JDK - VisualVM的一部分提供的分析器。
(我不会从分析“大O”的复杂性开始。首先介绍一下,这将告诉你从哪里开始寻找。然后你可能想要正式或非正式地查看热点的算法复杂性。)
我知道有Cyclomatic Complexity Methods。
圈复杂度不是性能的预测指标。它(据说)是代码可维护性的衡量标准,而不是计算复杂性。同样可能是“metrics2”的东西,虽然我不熟悉它。
答案 1 :(得分:2)
首先从抽象分析开始,然后进入细节和测量。
对于分析,我会在big O notation中查看算法的复杂性。这是对运行时的抽象分析(而Cyclomatic Complexity等指标则考虑代码质量)。
对于算法分析,我发现Cormen的书"Introduction to algorithms"非常好。
当您了解算法的复杂性时,您可以检查替代算法是否更好或者在何处进行算法改进。
避免使用premature optimization:只有当您确定自己拥有良好的算法时,才应详细说明并进行衡量。
要检查您的理论分析是否正确并查看技术实施(主要是搜索热点并优化热点),您可以使用macro benchmarking tools和JVisualVM等分析器。
答案 2 :(得分:1)
在大多数情况下,探查器是最好的,但有时最好使用简单的秒表:http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/base/Stopwatch.html
Basic usage:
Stopwatch stopwatch = new Stopwatch().start();
doSomething();
stopwatch.stop(); // optional
long millis = stopwatch.elapsed(MILLISECONDS);
log.info("that took: " + stopwatch); // formatted string like "12.3 ms"