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-while
和 while
等所有循环类型最终都会产生非常相似的代码。
唯一的例外是 for-each
循环。 for-each 循环仅适用于 Iterable
的事物。在后台发生的是创建 Iterator
并使用其 hasNext()
和 next()
方法进行迭代。
这样做的问题是它会导致很小的开销。在 Java 集合的最常见实现中,每次执行循环都会创建一个新的 Iterator
对象。如果 for-each 循环运行得非常频繁,垃圾收集可能真的会成为一个问题并导致小的延迟。
由于您的问题中有 [libgdx] 标记,我假设您熟悉 LibGDX 提供的替换集合。例如 Array
或 ObjectSet
通过 重新使用 它们的迭代器来尝试完全避免我提到的问题。
正如我已经评论过的,我相信 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实际指的。
在寻找一些与 ligGDX 相关的信息时,我找到了 this page。 引起我注意的是这句话:
No, don't use a while loop. Might cause hangs.
我的问题是:这是真的吗?如果是真的,为什么?我假设它与垃圾收集器有关,但我不确定为什么 while 循环比 for 循环需要更多的 gc 注意力。
while
循环与任何其他循环一样安全。 for(;;)
、do-while
和 while
等所有循环类型最终都会产生非常相似的代码。
唯一的例外是 for-each
循环。 for-each 循环仅适用于 Iterable
的事物。在后台发生的是创建 Iterator
并使用其 hasNext()
和 next()
方法进行迭代。
这样做的问题是它会导致很小的开销。在 Java 集合的最常见实现中,每次执行循环都会创建一个新的 Iterator
对象。如果 for-each 循环运行得非常频繁,垃圾收集可能真的会成为一个问题并导致小的延迟。
由于您的问题中有 [libgdx] 标记,我假设您熟悉 LibGDX 提供的替换集合。例如 Array
或 ObjectSet
通过 重新使用 它们的迭代器来尝试完全避免我提到的问题。
正如我已经评论过的,我相信 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实际指的。