libGDX - while循环导致挂起

时间:2015-02-25 11:18:52

标签: java libgdx

在寻找与ligGDX相关的一些信息时,我发现了this page。 引起我注意的是这句话:

  

不,不要使用while循环。可能导致挂起。

我的问题是:这是真的吗?如果这是真的,为什么?我认为它与垃圾收集器有关,但我不确定为什么while循环需要比for循环更多的gc注意。

2 个答案:

答案 0 :(得分:2)

while循环与任何其他循环一样安全。所有循环类型(如for(;;)do-whilewhile)最终都会产生非常相似的代码。

唯一的例外是for-each循环。 for-each循环仅适用于Iterable的内容。后台发生的事情是创建Iterator并使用其hasNext()next()方法进行迭代。

这个问题是它会产生很小的开销。在Java集合的大多数常见实现中,为每次循环执行创建一个新的Iterator对象。如果for-each循环经常运行,垃圾收集可能真的成为问题并导致小的滞后。

由于您的问题中有[libgdx]标记,我假设您熟悉LibGDX提供的替换集合。例如,ArrayObjectSet尝试通过重新使用他们的迭代器来避免我提到的问题。

答案 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实际上所指的。

相关问题