栈溢出

栈溢出,第1张

溢出 java递归改为循环后为什么不会导致栈内存溢出?

我们知道,在编程中如果想让某个业务重复执行,一般有两种实现方式,分别是:递归和循环。

在实际编码过程中,我们并不建议使用递归,反而是建议使用循环,这是为什么呢?递归不当会导致内存溢出其实不单单是Java,任何一款编程语言,如果递归写法不对,那就可能导致内存溢出!学过Java的朋友肯定或多或少都听说和了解过栈内存和堆内存,程序在运行时,电脑 *** 作系统会给每个进程都分配有堆内存、栈内存,所分配的堆栈内存都是有上限的,一旦超过了这个上限就会导致内存溢出现象。

为什么递归 *** 作容易导致内存溢出呢?原因主要有以下几点:递归方法体内,如果终止递归的条件写错了,那可能会导致无限递归,最终导致内存溢出;即使递归方法及退出递归条件都是正常的,但若递归深度过深(递归次数过多),也会导致栈内存溢出!因为栈的出入规则是先入后出(先入栈的最后再出来),如果递归次数过多就会导致只入栈不出栈,最终栈内存溢出。

递归改循环可以降低内存溢出的可能注意,递归写法改成循环写法可以降低内存溢出的风险,但这不是绝对的,如果循环写成了死循环一样会导致内存溢出。

递归写法改成循环写法的好处是,不会在短时间内出现栈的只入不出现象,所以可以规避栈内存溢出现象。

递归每进入一次方法,会将上个方法的数据压入栈中以便将来恢复继续执行。

循环每次执行的时候,临时变量都失效了,只有少量的全局变量。

你的这个问题的原因是因为递归次数太多,导致栈内存耗尽。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/4296636.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-10-29
下一篇2022-10-29

发表评论

登录后才能评论

评论列表(0条)

    保存