java - java无限循环什么时候停止?

标签 java algorithm loops for-loop garbage-collection

我阅读了有关无限循环的文章,发现在某些语言中它会在堆栈溢出或达到分配的最大内存时停止。其他人将永远循环,具体取决于程序和语言的类型。 我的问题是,Java 无限循环会停止吗?我只是好奇,因为 Java 有一个垃圾收集器,当内存泄漏时会重用内存,以防达到分配的最大内存和堆栈溢出。

还有,这种死循环会停止吗?

for( ; ; ){}

最佳答案

My question is, do java infinite loops stop?

有的有,有的没有。这取决于循环的实现方式。

基本上,您确定在其他语言中停止的案例可以在 Java 中也停止……这取决于您对它们进行编码的方式。

  • 用无限递归实现的循环会发生堆栈溢出。这在 Java 中比在某些语言中更容易“实现”。 (没有尾调用优化。)

  • 如果循环重复分配仍可访问的对象,将发生堆溢出...以至于 GC 无法回收它们。

(看似的无限循环还有多种其他方式可以终止。)

I'm just curious because java has a garbage collector, that reuse memory when there's memory leak in case of reaching allotted maximum memory and stack overflow.

垃圾收集器会回收无法访问的对象,但无法回收可访问的对象(即可以在未来被程序使用的对象)。

垃圾收集器不处理堆栈内存,因此与堆栈溢出故障无关。

Also,will this kind of infinite loop stop?

没有。


严格来说,任何循环如果因为任何原因停止都不是无限的。这包括堆栈溢出或内存耗尽等原因。

但即使是无限循环也不是真正的无限。最终用户将终止循环程序,电源将失效,硬件将报废......或类似的事情。

关于java - java无限循环什么时候停止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18862264/

相关文章:

java - AppEngine 网站中的在线用户

java - Java + Hibernate中对象的匹配算法

python - 如何使用 Python 3.6 遍历图像文件夹并在 Jupyter Notebook 中内联打印图像

r - 正确的编码方式——避免 for 循环

c++ - 为什么 C++ STL 中的算法、迭代器和容器是分离的

读取多个 .gpx 文件

java - 如果我省略 Java 的 volatile 关键字会发生什么?

java - 当没有控制台时,Java 是否为 System.out.println(...) 运行任何东西?

c - 密码算法求解器分解的效率

swift - 二叉搜索树中节点的后继 - Swift