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