使用设计模式会使java代码变慢吗?

时间:2012-10-06 12:07:06

标签: java performance design-patterns

使用设计模式会使java代码变慢吗?如果我使用额外的接口和语法结构(如类包装),我会得到很好的组织,但代码速度慢或不会使我的代码显着变慢?

7 个答案:

答案 0 :(得分:11)

这将使您的代码显着更慢。由于某些函数调用包含在其他类或方法中,因此某些方法调用稍微慢一点,但人类不会注意到这一点。这大约是纳秒。 Allways优先考虑良好的可读性和可重用代码的优势。

我是一个高性能的应用程序,您应该考虑在基于模式设计和实现之后将代码重构为更高的性能。但通常不需要这样做。

并且一如既往:这取决于所使用的模式和程序的用例。

答案 1 :(得分:3)

按照你的思路,首先应该永远不要使用Java,因为它充满了抽象层,使得编写正确和可维护的代码更加方便,但是将速度降低到汇编程序或C的速度以下。你担心包装器使你的代码显着变慢,你可能有一个使用C的例子比Java更合适。

另一方面,你应该肯定注意不要过度工程,并在代码中看到的每个问题上抛出大量的模式。明智地使用模式,你可以清楚地看到好处,而不仅仅是你认为模式在理论上可能适合的地方。

我更喜欢编码的方式是首先制作解决我当前问题的最简单,最愚蠢的解决方案。如果以后我必须添加一个或两个类似的函数,引起代码重复或其他代码气味,那么我才会考虑引入适当的模式。

答案 2 :(得分:1)

接口使您的代码在将来更清晰,更容易更改,但对速度没有影响,因为它们的存在只是为了告诉编译器您的代码如何组合在一起。

设计模式模式通常是常见问题的解决方案。如果您遇到问题,请使用其中一个众所周知的解决方案。它会让你的程序变慢吗?这取决于在可用解决方案之间做出的选择。您需要了解每种模式的权衡,以便做出选择。

但是,如果不使用设计模式解决方案,您将使用自己的自制DIY解决方案;当我们这样做时,我们通常也不能解决问题,或者很快(在我们的时间和机器时间内),或者对于将来的维护是可以理解的。最后一点是因为设计模式为我们提供了一种讨论问题和解决方案的新方法。一旦我们理解了新词汇,我们就可以更轻松地解决更复杂的问题。

那么他们会让你的程序变慢吗?不,他们让它发挥作用。更快。

享受您的模式阅读。如果你有一个实际的问题要解决它们会更有意义。

答案 3 :(得分:0)

如前所述,使用设计模式的开销微不足道,而且可以肯定的是,只需要看一下像android一样需要性能的一些java项目的代码源,你会惊讶于所有这些使用大量的设计模式。

然而,一些设计选择会影响性能,例如选择使用List而不是地图更适合的hashmap。

答案 4 :(得分:0)

理想情况下,在使用允许的编程结构时,您不必担心性能。 JVM擅长保持代码优化。大多数性能问题通常由我们编写与线程同步相关的代码的代码以及我们执行I / O(例如DB调用)的地方引起。几乎没有额外的接口和类来使您的设计模块化和整洁不会受到伤害。如果您正在编写依赖于使用反射和其他高级功能的框架,则可能必须要小心,如果以次优方式执行此操作,则可能会增加性能瓶颈。

答案 5 :(得分:0)

在大多数情况下,额外的代码换行会使代码变慢。但在某些情况下,情况并非如此。如果迭代> 10亿次迭代,额外的包装可能会明显变慢。好的做法是首先编写好的可读和可重用代码。只有在尝试分析和优化代码之后,性能才会最差。通常您需要更改计算算法,但有时您需要编写解决方法代码。

答案 6 :(得分:0)

也许。像往常一样,在权衡方面没有简单的答案。

您已经确定使用某种模式会使代码更清晰,但这可能会以性能损失为代价。所以你会怎么做?你用最好的判断。通常可能首先尝试模式,然后测试是否足够快,然后根据需要进行优化。有时您已经知道它必须尽可能快,或者相反,代码对性能不是很重要。