Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java libGDX-循环原因挂起时Can_Java_Libgdx - Fatal编程技术网

Java libGDX-循环原因挂起时Can

Java libGDX-循环原因挂起时Can,java,libgdx,Java,Libgdx,在寻找一些与ligGDX相关的信息时,我发现。 引起我注意的是这句话: 不,不要使用while循环。可能会导致挂起 我的问题是:这是真的吗?如果这是真的,为什么?我假设它与垃圾收集器有关,但我不确定为什么while循环比for循环需要更多的gc关注。awhile循环与任何其他循环一样安全。所有循环类型,如(;)、do while和while最终将产生非常相似的代码 唯一的例外是每个循环的。for-each循环只在可Iterable的事物上起作用。在后台发生的事情是创建一个迭代器,并使用它的has

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

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


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

a
while
循环与任何其他循环一样安全。所有循环类型,如(;)、
do while
while
最终将产生非常相似的代码

唯一的例外是每个循环的
。for-each循环只在可
Iterable
的事物上起作用。在后台发生的事情是创建一个
迭代器
,并使用它的
hasNext()
next()
方法进行迭代

这样做的问题是,它会导致很小的开销。在Java集合的大多数常见实现中,每次执行循环都会创建一个新的
迭代器
对象。如果for-each循环经常运行,那么垃圾收集可能真的会成为一个问题并导致小的延迟


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

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

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

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

While(i=0;i)如果退出条件永远不满足,所有循环运算符都可能导致挂起。@munyul是对的。但我对这句话的理解是,它通常会导致挂起,而不是具体的(和明显的)挂起案例。虽然你可能有一点,因为while比for更容易错误地创建无限循环。据我所知,
for
循环和
while
循环之间唯一的真正区别是
for
循环要求你提供初始、退出和增量条件。这使得它比pro更安全一些语法错误,如果你理解我的意思…@munyul是的,我理解你的意思,你是绝对正确的。我只是不确定这是否是作者的意思。你可以像使用while或do while循环一样轻松地创建永恒for循环,因为它不安全。但是它更可读,因为初始化和下一次迭代更改是sepa根据说明框进行评级是的,我知道替换集合,部分是由于您对:-)的回答。但是,在我发现这句话的线程中,我们只有一个常规for(不是每个for),而第一个显然在性能方面更优。也许这根本不是真的:-)除了for-each循环之外,我看不出任何循环会导致延迟/挂起的原因。当然,这始终取决于您在循环中实际执行的操作,但是只有
while
循环的存在,而不是简单的for
循环,不能对任何性能问题负责。谢谢。加上上面的评论,这是我接受的答案。也许只是我,但我永远不会这样理解这句话。(S) 他写道:不,不要使用while循环。可能会导致挂起。如果他是你建议的意思,那么应该是这样的:不要使用while循环。它将挂起应用程序。(可能还有一些关于缺少的增量)。Gibbo3771这样写的原因有很多,可能是他很匆忙,可能英语不是他的母语,等等。。。如果它真的困扰着你,在那些论坛上给Gibbo3771写一条消息,问:如果你幸运的话,你会得到一个回复(你喜欢的;))谢谢你的回答和建议,但是如果这个用户真的是这个意思,那么我真的不在乎:-)我的问题是,在libGDX中,你是否不应该使用while循环,因为它们会导致挂起,而不是for(;)循环。用户noone的回答和他的评论告诉我情况并非如此。