java递归堆栈溢出_【java】递归次数过多导致堆栈溢出
在写一个算法中,由于递归调用次数过多,堆栈溢出。
堆栈的大小是系统控制的,无法改变。
如果递归调用出现问题,可以考虑采取循环的方式来解决,将需要的数据在关键的调用点保存下来使用。简单的说,就是用自己的数据保存方法来代替系统递归调用产生的堆栈数据。
溢出的意思就是越界,操作系统会给每个进程分配一个最大上限的堆栈空间,如果超过了这个内存空间大小程序就会coredump,就像你创建一个太大的数组会崩溃一样,因为这里堆溢出了。操作系统分配给一个进程的栈空间是2M,堆空间在32位机器上是4G。如果你的进程的栈空间使用超过了2M就会栈溢出,堆使用超过4G就会堆溢出。
那么递归为什么会导致栈溢出呢?相信大家知道栈的出入规则,就像一个瓶子,方法压栈运行,先进后出,递归的话那么先入的不能出栈,会存在栈空间中,这样就容易导致栈满而溢出。
每当你调用一个方法,在这个方法执行前都会将之前的内存地址(也就是调用点)入栈,等被调用的方法执行完将地址出栈,程序根据这个数据返回调用点。
若递归调用次数太多,就会只入栈不出栈,于是堆栈就被压爆了,此为栈溢出。
递归函数调用的太深,需要太多的内存,递归里用到的局部变量存储在堆栈中,堆栈的访问效率高,速度快,但空间有限,递归太多变量需要一直入栈而不出栈,导致需要的内存空间大于堆栈的空间。
视频解析:https://www.icourse163.org/learn/ZJU-93001?tid=1003013004#/learn/content?type=detail&id=1004242195&cid=1005239393&replay=true
如何利用循环代替递归以防止栈溢出
http://www.cnblogs.com/wb-DarkHorse/archive/2013/11/15/3284228.html
尾递归
http://www.cnblogs.com/JeffreyZhao/archive/2009/03/26/tail-recursion-and-continuation.html
http://www.cnblogs.com/JeffreyZhao/archive/2009/04/01/tail-recursion-explanation.html
java递归堆栈溢出_【java】递归次数过多导致堆栈溢出相关推荐
- java实现递归下降分析_使用递归实现检查未知层级目录中的文件-Java实用技能
现在有这样一个需求,给你一个目录,需要你在此目录中查找全部名字中包含指定字符的文件. 这题的主要难点在于:目录中可能包含子目录,子目录中又会包含子目录.而我们事先没办法确定子目录到底有多少层!这时候就 ...
- 设置线程堆栈大小_哇擦,传说中的堆栈溢出和快速排序
stack overflow 堆栈溢出和快速排序这两个概念对开发人员来说并不陌生,但是通知都只是听说过,真正开发过程中却很少会遇到.我也是敲代码好些行后非常有幸撞上了,而且还是两个一起出现的,这其中过 ...
- java堆外内存溢出_JVM 案例 - 堆外内存导致的溢出错误
案例 一个网站为了实现客户端实时从服务端接收数据,使用了 CometD 1.1.1 作为服务端推送框架,服务器是 Jetty7.1.4,CPU i5,内存 4G,操作系统 32位Windows. 服务 ...
- java 内存泄露 书籍_[Java教程]一次艰难的内存泄露排查,BeanUtils 的锅
[Java教程]一次艰难的内存泄露排查,BeanUtils 的锅 0 2020-10-29 18:24:42 现象 通过jstat -gcutil pid 5000 ,发现fgc次数很多而且频繁,此时 ...
- java 基础面试 英文_[Java面试] 面试java基础总结大全
原标题:[Java面试] 面试java基础总结大全 基础知识: 1.JVM.JRE和JDK的区别: JVM(Java Virtual Machine):java虚拟机,用于保证java的跨平台的特性. ...
- python递归 数字全排列_利用递归实现全排列(python)
利用递归实现全排列(python) """ 利用递归实现全排列 第一个位置可能有n种可能,第二个位置可能 有n-1种可能...... 代码思路就是第一个位置可以和n个元素 ...
- java privatekey输出字符串_[Java教程]根据字符串(String)生成公钥(PublicKey)和私钥(PrivateKey)对象_星空网...
根据字符串(String)生成公钥(PublicKey)和私钥(PrivateKey)对象 2012-05-29 0 1.字符串生成公钥对象 PublicKey /** * 实例化公钥 * * @re ...
- java视、频_[java视频]感人故 事视 频网 站上那找~~~
感人故 事视 频网 站上那找~~~ 问题补充:感人故 事视 频网 站上那找~~~ ●呵呵,你问对人了,感人故事就去"新浪show",现在是新浪期下的网站,运行稳定,观看流畅,上传简 ...
- java 历遍 类_[Java] 遍历指定包名下所有的类(支持jar) | 学步园
项目需要,仅做记录. 支持包名下的子包名遍历,并使用Annotation(内注)来过滤一些不必要的内部类,提高命中精度. 通过Thread.currentThread().getContextClas ...
最新文章
- docker pull下载镜像时的报错及其解决方法
- java system.runfinalization()_Android中缓存理解(一)
- spring教程极客学院,Mybatis-Plus学习总结(超详细整理
- 洛谷1527(bzoj2738)矩阵乘法——二维树状数组+整体二分
- 请问在allegro中如何在铜箔上单独放置过孔?
- 针对Parse error: syntax error, unexpected T_PUBLIC in D:报错提醒
- 虚拟磁盘没有可用的合格服务器,VMware提示:没有更多空间可供虚拟磁盘***.vmdk使用 所引发的故障及处理...
- Delphi 10.2.3发布
- 初学Phreeze 3
- 【博客话题】接触Linux 11年
- ACE_Reactor学习1 总体计划
- 提升专业素养之软件工程概述
- SWFUpload文件上传
- Linux系统启动流程
- php动态网页倒计时代码,js如何实现动态倒计时效果
- SteamVR自定义手部抓取姿势
- java基础 java面向对象,抽象类,接口,变量
- 2021 写博客指南·万字长文警告
- Android 仿应用宝下载进度条
- php 公众号 欢迎,关注公众号的欢迎语怎么设置?公众号欢迎语怎么加链接?