gpt4 book ai didi

java - 为每个 for 循环使用相同的 int 是否更好?

转载 作者:行者123 更新时间:2023-12-02 11:25:15 25 4
gpt4 key购买 nike

在一个程序中,例如,我有50 for 循环,经常运行;每次运行时都会创建 50 int,然后每个都会消耗内存。

如果我声明一个 int i 在每个类的开头,然后在每个 for 循环中重用它,现在会有,比如说,5 个整数 i (i = 类的数量)创建,然后在每个循环中重新分配值 0,通过不使用 i 淹没堆来节省空间s.

这会有助于程序的性能还是不会有太大差异?在这种情况下,堆内存是否像我想象的那样工作?

最佳答案

在多个循环中重复使用简单的、小的、短生命周期的整数是一种代码味道 - 不要这样做。

如果您的循环位于同一方法中,则许多循环本身可能就是一种代码味道。也许您应该将该方法分割成更小的代码块,这些代码块可以更容易地测试,并且彼此独立。

循环中的计数器几乎总是彼此独立。异常(exception)情况可能是一个循环向上计数,下一个循环向下计数,其中初始值取决于前一个循环的最后一个值。如果您将计数器重新初始化为 for 循环的第一个语句(到目前为止我见过的 99% 的循环都是这种情况),那么它们是彼此独立的,并且计数器变量的声明应该反射(reflect)这一点。这是记录代码的一种重要方式。

重复使用计数器只能证明某些编码人员的优化想法是错误的。

现在更糟糕的想法是在类级别定义一些计数器(一些计数器,因为您有嵌套循环)并从不同的方法调用相同的计数器。哇!你不会考虑这一点,是吗?这不仅会避免使类线程保存 - 您无法从另一种方法调用一种方法,而不会让自己陷入困境。

考虑一下这样的情况:您有一个带有 for 循环的方法,由于某种原因您将重构该方法。也许 Java9 可以提供更优雅的解决方案,但它有一个带有一些 i 的 for 循环,并且 i 在 for 循环的顶部初始化 for (i=0; ... 和现在你看看它来自哪里,并意识到,它不是在该方法中声明的,而是一个实例变量!该类有 500 行长,其中有 20 个方法,每个方法平均长 25 行。其中许多使用同样的i。现在你必须调查,你的方法调用了哪个方法,哪个方法调用了你的方法,并且可能取决于你结尾的i的值,它可以并行运行。你注定要失败!而不是25 行代码,你脑子里必须有 500 行代码,才能推理出发生了什么。

只要没有充分的理由重用它,局部变量的范围就应该尽可能窄。变量在作用域内的行数越少,某些代码就越容易理解。

您必须始终查看变量的初始化位置,以找到它的当前,在声明变量的位置,找到它的类型(它是长整型还是整型) ,一个字节,一个短?),稍后会重复使用。计数器几乎从不重复使用。通过在 for 循环头中声明它们,可以轻松推理您的代码,这样每个人都知道,它对后面的代码没有影响。

好吧,在有意义的地方使用简化的 for 循环,以防止丑陋的相差一错误。那么您就不必考虑使用了几个字节。

但最后,我承认,对于初学者来说,这是一个合理的问题。我以前也有这个想法。 :)

关于java - 为每个 for 循环使用相同的 int 是否更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49683558/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com