我了解到无限循环在某些语言中会在堆栈溢出或达到分配的最大内存时停止。而其他语言则根据程序类型和语言不同可能会一直循环下去。
我的问题是,Java的无限循环会停止吗?我很好奇因为Java有垃圾回收器,在内存泄漏时可以重用内存,以防止达到分配的最大内存和堆栈溢出。
此外,这种类型的无限循环会停止吗?
for( ; ; ){}
我了解到无限循环在某些语言中会在堆栈溢出或达到分配的最大内存时停止。而其他语言则根据程序类型和语言不同可能会一直循环下去。
我的问题是,Java的无限循环会停止吗?我很好奇因为Java有垃圾回收器,在内存泄漏时可以重用内存,以防止达到分配的最大内存和堆栈溢出。
此外,这种类型的无限循环会停止吗?
for( ; ; ){}
无限循环不会停止,除非有其他原因导致整个程序崩溃 :-)
通常情况下,这是由于资源短缺引起的,比如在无限递归的情况下是堆栈空间不足,或者在循环中分配了一些内存(但未释放),导致内存耗尽。
垃圾回收只会丢弃垃圾。如果内存仍然可以被变量访问,则不被视为垃圾。
换句话说,如果你的无限循环每次都向链表末尾添加一个元素(并且你没有失去对头部的访问权限),那么所有这些节点都不会被垃圾回收,最终会导致内存耗尽。
你的那个特定的循环:
for (;;) {}
由于它未使用任何资源,因此循环实际上不会停止。当然,你可以终止该进程,或者你可能有一个单独的线程使用资源。这两种情况(以及其他事件)可能导致循环停止,但它们都在该循环的控制范围之外。
如果内存在循环中增长,无限循环可能会因为内存而停止。但是,在每次迭代中创建一些新的大型对象,则最终会由于内存限制异常而停止。
boolean run = true
并使用while(run) { }
,它会通过,因为它可以被其他线程更改,但如果没有更改,你将得到一个无限循环。 - Diego C Nascimento