为每个for循环使用相同的int更好吗?

时间:2018-04-06 00:37:39

标签: java performance for-loop int heap-memory

在一个程序中,我有50表示经常运行的循环;每次运行时都会创建50 ints,然后为每个人消耗内存。

如果我声明int {{ 1}} 在每个类的开头,然后在每个for循环中重用它,现在会创建i5 ints i =类的数量),然后重新分配每个循环中i的值,通过不会使0 s充满堆来节省空间。

这是否有助于程序的性能或者它不会有太大差别?堆内存是否可行,因为我认为它适用于这种情况?

3 个答案:

答案 0 :(得分:1)

重复使用简单,小巧,简短的生命整数来代替多个循环是代码味道 - 不要这样做。

如果你的循环采用相同的方法,那么许多循环可能就是它自己的代码味道。您可能应该将该方法拆分为更小的代码块,这些代码可以更容易地进行测试,彼此独立。

循环中的计数器几乎总是彼此独立。异常可能是一个循环,它会向上计数,下一个循环计数,其中初始值取决于前一个循环的最后一个值。如果你重新初始化你的计数器作为for循环的第一个语句,这是我到目前为止看到的99%的循环的情况,它们彼此独立,并且计数器变量的声明应该反映出来。这是一种重要的记录您的代码。

重新使用计数器只会记录某些编码器有错误的优化思路。

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

考虑一下你有一个带有for循环的方法的情况,你会因某种原因重构。也许使用Java9可以实现更优雅的解决方案,但它有一个带有一些i的for循环,并且i在for循环for (i=0; ...的顶部初始化,现在你看它来自哪里,并实现,它不是在该方法中声明,而是实例变量!这个类有500行长,假设有20种方法,平均每行25行。他们中的许多人使用同样的我。现在你必须调查,你的方法调用哪个方法,哪个方法调用你的方法,并且可能依赖于你结束的i的值,它可以并行运行。你注定要失败!代替25行代码,你必须要有500行代码才能理解,发生了什么。

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

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

好吧,并在有意义的地方使用简化的for循环,以防止丑陋的逐个错误。然后你不必推断使用几个字节。

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

答案 1 :(得分:0)

我不明白为什么你需要在主方法中拥有那么多循环。如果这些整数仅用作迭代器,并且程序中确实有很多循环,则应该将它们安排到特定的函数/方法中,以执行这些循环正在执行的任何任务。

通过这样做,你可以将局部变量用作这些方法中的每一个的迭代器,并且当方法完成它时,将释放用于这些变量的内存。

答案 2 :(得分:0)

不,它真的不重要,因为现在编译器非常强大且差别可以忽略不计,但这里的主要问题是你真的需要设置&#39; i&#39; 价值最高,随着代码的增长,您开始在不同/复杂情况下使用&#39; ,您可能会开始看到&#39; i&#39; < / strong>表现不同,并且不知道为什么会发生这种情况以及调试整个事情以找出导致问题的原因的痛苦

如果您真的想知道其中的差异,可以参考此链接,该链接谈论您谈论的Difference between declaring variables before or in loop?

几乎相同的情况