不。过早的优化是万恶之源。
相反,编写您的代码,因为它在概念上最有意义。认真写,是的。但是不要认为你可以成为一个“人类编译器”并优化并仍然编写好的代码。
一旦您编写了代码(或多或少,取决于您的经验水平),您就可以为它编写性能测试。尝试考虑可以使用代码的不同方式(连续多次,从前到后或反向,许多并发调用等)并尝试在测试用例中涵盖这些。然后对您的代码进行基准测试。
如果您发现某些测试用例表现不佳,请调查原因。测量测试用例的各个部分以查看时间的去向。放大花费最多时间的部分。
大多数情况下,您会发现奇怪的循环,在再次阅读代码时,您会认为“以这种方式编写它很愚蠢。当然这很慢'并且很容易修复它。以我的经验,大多数性能问题都可以通过这种方式解决,并且几乎不需要“核心优化”。
最后你会发现 99*% 的性能问题可以通过只接触 1% 的代码来解决。其他代码永远不会发挥作用。这就是为什么您不应该“过早”优化的原因。您将花费宝贵的时间优化最初没有性能问题的代码。并使其在此过程中的可读性降低。
数字当然是组成的,但你知道我的意思:)
Hot Licks 指出这不是一个很好的答案,所以让我用一些好的 ol' 性能提示来扩展这个:
密切关注 I/O
大多数性能问题不在纯 Java 中。相反,它们与其他系统交互。特别是磁盘访问速度非常慢。网络也是如此。所以尽量减少它的使用。
优化 SQL 查询
如果您不小心,SQL 查询会增加程序的执行时间,甚至是几分钟。所以要非常仔细地考虑这些。再次对它们进行基准测试。您可以编写非常优化的 Java 代码,但如果它首先花费 10 秒钟等待数据库运行一些怪物 SQL 查询,那么它永远不会很快。
使用正确的集合
大多数性能问题都与多次做事有关。通常在处理大量数据时。将您的数据放在地图中而不是列表中可以产生巨大的差异。还有针对各种性能要求的专用集合类型。研究它们并明智地选择。
不要写代码
当性能真的很重要时,从一段代码中挤出最后一个“滴”本身就成为一门科学。除非您正在编写一些非常奇特的代码,否则很有可能会有一些库或工具包来解决您的问题。它将被现实世界中的许多人使用。尝试和测试。不要试图击败该代码。用它。
我们谦虚的 Java 开发人员是代码的最终用户。我们采用语言及其生态系统提供的构建块并将其连接在一起以形成应用程序。在大多数情况下,性能问题是由于我们没有正确使用提供的工具,或者根本没有使用任何工具造成的。但我们确实需要具体细节才能讨论这些。基准测试为您提供了这种特异性。当识别出慢代码时,通常只需将集合从列表更改为映射,或预先对其进行排序,或从某些查询中删除连接等。