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

mj9*_*112 3 java algorithm garbage-collection loops for-loop

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

此外,这种无限循环会停止吗?

for( ; ; ){}
Run Code Online (Sandbox Code Playgroud)

Ste*_*n C 7

我的问题是,java无限循环停止吗?

有些人有,有些则没有.这取决于循环的实现方式.

基本上,您确定在其他语言中停止的情况也可以在Java中停止...取决于您如何编码它们.

  • 通过无限递归实现的循环将发生堆栈溢出.这在Java中比在某些语言中更容易"实现".(无尾调用优化.)

  • 如果循环重复分配仍然可以访问的对象,则会发生堆溢出...因此GC无法回收它们.

(还有各种其他方式可以看似无限循环终止.)

我只是好奇,因为java有一个垃圾收集器,当内存泄漏时,如果达到分配的最大内存和堆栈溢出,则重用内存.

垃圾收集器回收可达的对象,但可到达(即该对象可通过该程序在将来使用)无法回收.

垃圾收集器不处理堆栈内存,因此它与堆栈溢出失败无关.

此外,这种无限循环会停止吗?

没有.


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

但即使是无限循环也不是真正的无限.最终用户将杀死循环程序,电源将失败,硬件将被废弃......或类似的东西.

  • 我认为没有人认为"无限循环"中的"无限"是数学无限.它更像是"一个没有任何有效限制的循环". (3认同)