【问题标题】:When to consider code efficiency in Java? [closed]何时考虑 Java 中的代码效率? [关闭]
【发布时间】:2016-05-16 22:05:38
【问题描述】:

这些天,我在学校学习不同的 Java 代码效率 (big-O)。 我不禁想知道何时在现实世界的编程中考虑代码效率。

这是程序员在 PDL/Pseudo 阶段考虑的事情吗? 或者就像你在写代码一样..

感谢您对此的看法!

【问题讨论】:

  • 我用它来选择集合。其余时间我测量。
  • StackOverflow 用于解决有关编程问题的问题。试试 Programmers StackExchange。
  • 仅在重要时。而且(令人惊讶的是)这通常并不重要。
  • 当你知道这是一个问题时,你应该考虑效率,因为你已经测量过了。
  • @StephenC 不仅;通常这无关紧要,但当你测量它时,性能问题并不是你可以预测的。

标签: java algorithm performance functional-programming big-o


【解决方案1】:

请注意,以下内容相当笼统,因为这个问题非常基础。

在现实世界中,程序员通常在以下情况下倾向于在设计阶段关注效率:

  • 他们正在解决的问题是时间紧迫的(例如:视频渲染和图像处理)
  • 他们正在处理的数据量太大(例如:分析来自提要的数十亿个字符串)

否则他们大多使用“现成的”方法和设计原则。

在某些情况下,代码审查会从缺乏经验的开发人员那里发现糟糕的实现,并且需要进行大量的返工和学习 :)

有时一些现有的实现是性能密集型的,并且由于各种原因(知识贫乏、时间限制、“当时这是个好主意”、对问题的理解不明确等)。在这种情况下,通常会对实施进行事后修复,在这些情况下,还会考虑更好的实施和效率。

还要注意 Knuth 的名言:

我们应该忘记小的效率,比如大约 97% 的时间:过早的优化是万恶之源。然而,我们不应该放弃那关键的 3% 的机会

在已建立的工程学科中,12% 的改进很容易获得,绝不会被认为是微不足道的,我相信同样的观点应该在软件工程中占主导地位

因此需要在时间投入、复杂性和优化之间取得平衡。如需更多信息,请阅读wiki link

【讨论】:

    【解决方案2】:

    如果您可以在 PDL 阶段看到对于非常大的 n,复杂性将是 O(2^n) 甚至 O(n^2),那么您会再想一想,但即便如此,您也可以对这些进行原型化只是为了看看会发生什么。

    通常你首先把事情做对,因为在它做对之前你无法真正判断它有多快,然后你使用分析器(例如https://docs.oracle.com/javase/7/docs/technotes/samples/hprof.html,一个非常简单的例子)来查看它的实际位置烧掉cpu,然后专注于那些位。

    【讨论】:

      【解决方案3】:

      大 O 表示法是表达算法效率的好方法,但在企业系统中处理代码时,事情通常会变得更加复杂。从长远来看,由于performance and stability problems 的错误,整个系统的架构及其运行的基础架构可能会产生更大的影响(并且修复成本更高)。

      当工程师使用性能分析器和其他工具确定瓶颈时,他们肯定会考虑(或根据)Big O 表示法,并希望在该瓶颈所在的区域实施更有效的算法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-25
        • 2016-10-31
        相关资源
        最近更新 更多