我可以对Java应用程序进行哪些标准优化重构?

时间:2009-02-27 13:27:14

标签: java optimization refactoring findbugs

我有一个半大的Java应用程序。它编写得非常糟糕,我怀疑我可以做很多简单的事情来清理一些事情并提高性能。

例如我最近找到了

String.matches(regex)

函数在具有相同正则表达式的循环中使用了很多。所以我用precompiled Patterns替换了它。我使用FindBugs(这是很棒的BTW),但是没有发现这个问题,而且我在工作中可以使用的工具有限。

还有什么其他简单的东西我应该看一下吗?

6 个答案:

答案 0 :(得分:5)

看看这些不同的工具:

我建议你看看Sonar,这是所有这些工具的绝佳包装。

所有这些工具都是免费的!

在全球范围内,它们不会帮助您提高性能,但会提高代码的质量。

答案 1 :(得分:5)

首先使它成为一个写得很好的应用程序。根据我的经验,大多数性能优势都不是做蠢事,而是做巧妙的优化。

当你有一个写得很好的应用程序时,就可以运行一个分析器并优化那些重要的应用程序。

答案 2 :(得分:4)

性能是一个问题吗?如果是这样,我不会重做任何事情,直到我在各种条件下分析代码并手头有一些硬数据告诉我时间花在哪里。你可能正在改变那些根本没有任何好处的东西。

我会担心线程安全问题。对此有多关注?

如果你要重构,首先要编写JUnit测试。它将有助于熟悉代码并为您提供安全网。测试必须在更改之前和之后通过。

最重要的是,不要因为你认为它是一团糟而进行大规模的重构。在您开始之前,您的团队和客户应该了解您正在做的事情。你有没有把你的(不可否认的好)想法告诉别人?软件是团队运动;沟通是关键。

答案 3 :(得分:1)

重构改进应用程序时要做的一件非常重要的事情就是首先重构代码,以便源代码看起来至少不错。完成之后,永远不要猜测优化的位置,始终测量瓶颈所在,并集中精力解决这些问题。一般来说,程序员喜欢做一些事情,例如为循环交换递归方法,选择精确正确的排序算法等,这通常会产生很小的差别。因此,请务必专注于正确的区域(使用太多CPU?内存?太多线程?长线锁?)

编辑:就像其他海报写的一样,当然要确保你的团队/你老板的其他人认为这项工作也值得做,如果这对他们来说不是问题,他们可能会关心的更少。

答案 4 :(得分:0)

通过分析器运行代码(检查速度和内存)。一旦你发现它的速度很慢(通常不在你认为的地方),找出你可以做些什么来加快速度。

另一个有用的东西(如果你有点勇敢)是使用NetBeans 7.0 M2(不要太恐慌,他们的非发布版本通常非常稳定)有一个名为“Jackpot”的插件搜索你的代码重构。其中一些与性能有关......但我认为它们中的任何一个都不会对速度做出根本改变。

一般来说,保持代码清洁易读,速度快。当它不快时,你会比加速它更容易加快速度。

当我写一些我知道必须快速的东西(解析类文件的代码)时,我曾做过的一次是每次做出更改时运行探查器。因此,我认为通过调用String。,实习生可以减少memroy,以确保将所有字符串汇集在一起​​。当我添加了intern()调用时,memry确实有点下降,但时间上升了一些巨大的数量(String.intern不必要地慢,或者是几年前)。所以在这一点上,我知道我刚刚做的事情是无法缓慢的,我解除了这一改变。

我不建议在一般开发中这样做,但是每天一次或每周一次通过分析器运行代码只是为了看事情并不是生产力的杀手。

答案 5 :(得分:0)

如果你正在读书,我强烈建议你阅读Josh Bloch的Effective Java