使用设计模式是否会使 java 代码变慢?如果我使用额外的接口和语法结构(如类包装),我是否会组织得很好但代码很慢,或者不会让我的代码明显变慢?
7 回答
这不会使您的代码明显变慢。由于某些函数调用包含在其他类或方法中,因此某些方法调用会慢一些,但人类不会注意到这一点。大约是纳秒。总是更喜欢具有良好可读性和可重用代码的优势。
我是一个高性能应用程序,您应该考虑在基于模式设计和实现代码后将代码重构为更高的性能。但通常这不是必需的。
和往常一样:这取决于使用的模式和程序的用例。
按照你的思路,一开始就不应该使用 Java,因为它充满了抽象层,可以更方便地编写正确和可维护的代码,但会将其速度降低到汇编程序或 C 的速度以下。如果你担心包装器使您的代码显着变慢,您可能有一个用例使 C 比 Java 更适合。
另一方面,您绝对应该注意不要过度设计和在代码中看到的每个问题上抛出大量模式。明智地使用模式,你可以清楚地看到好处,而不仅仅是你看到模式理论上可能适合的地方。
我更喜欢编码的方式是首先制作最简单、最愚蠢的解决方案来解决我的直接问题。如果以后我必须添加一两个更多类似的功能,从而导致代码重复或其他代码异味,我才会考虑引入适当的模式。
接口使您的代码更清晰,将来更容易更改,但对速度没有影响,因为它们的存在只是为了告诉编译器您的代码如何组合在一起。
设计模式模式是常见问题的常见解决方案。如果您遇到问题,请使用其中一种众所周知的解决方案。它会让你的程序变慢吗?这取决于您在可用解决方案之间做出的选择。您需要了解每种模式的权衡以便做出选择。
但是,如果不使用设计模式解决方案,您将使用自己的自制 DIY 解决方案;当我们这样做时,我们通常不会同时解决问题,或者解决问题的速度(在我们的时代和机器时代),或者对于未来的维护是可以理解的。最后一点是因为设计模式为我们提供了一种讨论问题和解决方案的新方式。一旦我们理解了这些新词汇,我们就可以更轻松地解决更复杂的问题。
那么它们会让你的程序变慢吗?不,他们让它发挥作用。快点。
享受你的模式阅读。如果您有实际问题要解决,它们会更有意义。
如前所述,使用设计模式的开销是微不足道的,可以肯定的是,只要看看一些像android这样需要性能的java项目的代码源,你会惊讶地发现它们都大量使用了设计模式。
然而,一些设计选择可能会影响性能,例如选择使用 List 而不是 hashmap,其中映射更合适。
理想情况下,当使用允许的编程结构时,您不应该担心性能。JVM 擅长保持代码优化。大多数性能问题通常出现在我们编写与线程同步相关的代码以及我们执行 I/O(例如 DB 调用)的代码中。很少有额外的接口和类来使您的设计模块化和整洁不会受到伤害。如果您正在编写自己的依赖于使用反射和其他高级功能的框架,您可能需要小心一点,如果您做得不够理想,您可能会冒着增加性能瓶颈的风险。
在大多数情况下,额外的代码包装会使代码变慢一些。但在某些情况下,这是不正确的。如果您迭代 >10 亿次迭代,额外的包装可能会明显变慢。好的做法是首先编写好的可读和可重用的代码。只有在那之后尝试分析和优化代码才会有最差的性能。通常您需要更改计算算法,但有时您需要编写解决方法代码。
也许。像往常一样,在权衡时没有简单的答案。
您已经确定使用某种模式会使代码更清晰,但这可能会以牺牲性能为代价。所以你会怎么做?你用你最好的判断。通常这可能是首先尝试该模式,然后测试它是否足够快,然后根据需要进行优化。有时您已经知道它必须尽可能快,或者相反,代码不是性能关键的。