libGDX - while 循环会导致挂起吗

libGDX - Can while loop cause hangs

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

No, don't use a while loop. Might cause hangs.

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

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

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

这样做的问题是它会导致很小的开销。在 Java 集合的最常见实现中,每次执行循环都会创建一个新的 Iterator 对象。如果 for-each 循环运行得非常频繁,垃圾收集可能真的会成为一个问题并导致小的延迟。

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

正如我已经评论过的,我相信 for 循环和 while 循环之间唯一真正的区别是 for 循环要求您提供 初始退出增量信息。我想这让程序员 更安全 健忘

至于为什么您链接的 post 的用户 (Gibbo3771) 说“不要使用 while 循环”,可能是因为 (s)他在谈论来自 DonDon 的 post。在 DonDon 的 post 中有以下 while 循环示例:

While (i=0 ;i <= deadBlock.size){
block1 = deadBlock(i)
block2 = deadBlock(i+1)
}

在这个来自 DonDon 的 psuedo 代码中,变量 i 设置为 0,但永远不会递增,在这种情况下会导致无限循环(挂起) .有可能,这就是Gibbo3771实际指的。