在寻找与ligGDX相关的一些信息时,我发现了this page。 引起我注意的是这句话:
不,不要使用while循环。可能导致挂起。
我的问题是:这是真的吗?如果这是真的,为什么?我认为它与垃圾收集器有关,但我不确定为什么while循环需要比for循环更多的gc注意。
答案 0 :(得分:2)
while
循环与任何其他循环一样安全。所有循环类型(如for(;;)
,do-while
和while
)最终都会产生非常相似的代码。
唯一的例外是for-each
循环。 for-each循环仅适用于Iterable
的内容。后台发生的事情是创建Iterator
并使用其hasNext()
和next()
方法进行迭代。
这个问题是它会产生很小的开销。在Java集合的大多数常见实现中,为每次循环执行创建一个新的Iterator
对象。如果for-each循环经常运行,垃圾收集可能真的成为问题并导致小的滞后。
由于您的问题中有[libgdx]标记,我假设您熟悉LibGDX提供的替换集合。例如,Array
或ObjectSet
尝试通过重新使用他们的迭代器来避免我提到的问题。
答案 1 :(得分:1)
正如我已经评论过的,我认为for
循环和while
循环之间唯一真正的区别是for
循环要求您提供初始,退出和增量信息。我想这会让程序员健忘让它变得更安全。
至于为什么那个用户(Gibbo3771)来自您链接的帖子说" 不使用while循环",这可能是因为他(s)他正在谈论DonDon的帖子。在DonDon的帖子中,有以下while
循环示例:
While (i=0 ;i <= deadBlock.size){
block1 = deadBlock(i)
block2 = deadBlock(i+1)
}
在DonDon的这个 psuedo 代码中,变量i
设置为0,但从不递增,在这种情况下会导致无限循环(挂起)。有可能,这就是Gibbo3771实际上所指的。