1,什么是栈溢出?

因为栈一般默认为1-2m,一旦出现死循环或者是大量的递归调用,在不断的压栈过程中,造成栈容量超过1m而导致溢出。

2,解决方案:

方法一:用栈把递归转换成非递归

通常,一个函数在调用另一个函数之前,要作如下的事情:a)将实在参数,返回地址等信息传递给被调用函数保存; b)为被调用函数的局部变量分配存储区;c)将控制转移到被调函数的入口. 从被调用函数返回调用函数之前,也要做三件事情:a)保存被调函数的计算结果;b)释放被调函数的数据区;c)依照被调函数保存的返回地址将控制转移到调用函数.所有的这些,不论是变量还是地址,本质上来说都是"数据",都是保存在系统所分配的栈中的. 那么自己就可以写一个栈来存储必要的数据,以减少系统负担。

方法二:使用static对象替代nonstatic局部对象

在递归函数设计中,可以使用static对象替代nonstatic局部对象(即栈对象),这不仅可以减少每次递归调用和返回时产生和释放nonstatic对象的开销,而且static对象还可以保存递归调用的中间状态,并且可为各个调用层所访问。

方法三:增大堆栈大小值

当创建一个线程的堆栈时,系统将会保留一个链接程序的/STACK开关指明的地址空间区域。但是,当调用CreateThread或_beginthreadex函数时,可以重载原先提交的内存数量。这两个函数都有一个参数,可以用来重载原先提交给堆栈的地址空间的内存数量。如果设定这个参数为0,那么系统将使用/STACK开关指明的已提交的堆栈大小值。后面将假定我们使用默认的堆栈大小值,即1MB的保留区域,每次提交一个页面的内存。

Java在创建线程时设置栈大小:thread(threadgroup group, runnable target, string name, long stacksize)

分配新的 thread 对象,以便将 target 作为其运行对象,将指定的 name 作为其名称,作为 group 所引用的线程组的一员,并具有指定的堆栈大小。

Java虚拟机的堆大小如何设置:命令行

java –Xms128m //JVM占用最小内存

–Xmx512m //JVM占用最大内存

–XX:PermSize=64m //最小堆大小

–XX:MaxPermSize=128m //最大堆大小

java如何解决栈溢出问题_如何解决栈溢出相关推荐

  1. java 栈溢出异常_一次栈溢出问题的排查 StackOverflowError

    栈溢出的原因 在解决栈溢出问题之前,我们首先需要知道一般引起栈溢出的原因,主要有以下几点: 是否有递归调用,循环依赖调用 是否有大量循环或死循环 全局变量是否过多 局部变量过大,如:数组.List.M ...

  2. java如何解决栈溢出问题_怎样解决栈溢出

    1,什么是栈溢出? 由于栈一般默觉得1-2m,一旦出现死循环或者是大量的递归调用,在不断的压栈过程中,造成栈容量超过1m而导致溢出. 2,解决方式: 方法一:用栈把递归转换成非递归 通常,一个函数在调 ...

  3. java redis 没密码配置_如何解决redis的NOAUTH Authentication required异常

    前言 最近学习中需要使用redis,于是在window上安装了一个redis(其实是我搞不好虚拟机和本地连接,于是放弃了虚拟机安装redis).一开始使用还很正常,也没有设置密码,按照网上所说的启动服 ...

  4. java 应用程序无法运行_关于解决浏览器无法运行小应用程序问题

    学习Java后发现,java有个小应用程序(applet)可以在网页上运行,就想这自己用apache弄一个本地的网站来在上面玩用Java写的网络游戏,于是就高高兴兴的做好准备,可是后面才发现,自己写的 ...

  5. java base64 显示不完整_如何解决CAD图纸显示不完整、图纸无效?一分钟教你,不允许错过...

    都知道AutoCAD绘图设计很需要时间和耐心,一点点的失误,处理起来都会很麻烦.当然即使你没有犯错,也是会有不少的麻烦惹上你. 比如今天要和说的CAD图纸显示不全,图纸无法打开,即使你没有对图纸进行任 ...

  6. java 启动进行并命名_如何解决这个“java.io.IOException:不能重命名原始文件”启动tomcat 5.5时?...

    java.io.IOException: Cannot rename original file to C:\Program Files\Apache Software Foundation\Tomc ...

  7. java拼图自动还原算法_自动解决智能拼图,A*算法+生成可解拼图(C++)

    [实例简介] 自动生成可解拼图问题,并用A*算法给出自动完成的步骤..另外还有暴力搜索的代码 [实例截图] [核心代码] pingtukejie └── pingtukejie ├── Release ...

  8. redis rua解决库存问题_如何解决高并发下的库存安全问题,没你想得那么复杂(附源码)...

    一. 问题 不知道大家该开发中有没有遇到这样的一个问题,在电影院购票或者去网上买东西的时候,比方说当年哪吒大电影出来的时候,那抢票相当火爆啊,一票难求,那购票系统的后台是如何保证观众能买到自己喜欢的票 ...

  9. python访问数据库如何解决高并发_怎样解决数据库高并发的问题

    怎样解决数据库高并发的问题?解决数据库高并发使用缓存式的Web应用程序架构.增加Redis缓存数据库.增加数据库索引.页面静态化.使用存储过程.MySQL主从读写分离.分表分库.负载均衡集群. 解决数 ...

最新文章

  1. 数字图像处理中常用图像分割算法有哪些?
  2. Penang Industrial Zone
  3. (10)FPGA顶层通用模块(学无止境)
  4. How to remove ROM in MAME
  5. 并行程序调试、测试与模型检测
  6. CopyTo 方法详解
  7. Docker 安装(使用阿里源)
  8. 小布机器人怎么断网_华硕“小布”智能机器人上手体验:造型呆萌可爱 全年龄段适用...
  9. linux 误删文件恢复
  10. 转:CWnd的函数,以后可以在这儿找了!
  11. 宿华卸任快手CEO程一笑接替;新思科技扩大与台积公司的战略技术合作 | 全球TMT...
  12. java.net.ConnectException: Connection refused: no further information【已解决】
  13. 永澄:认知层次模型-道术器用
  14. php打印10以内减法表,幼儿10以内减法教案
  15. 《大数据系统基础》课程实践项目中期答辩顺利举行,清华持续探索大数据人才教育创新之路...
  16. 《道德经•第六十三章》体悟
  17. 用python做频数分析_Python统计如何进行DNA序列整理
  18. 循环智能的智能对话分析系统:帮助新东方在线实现全量机器质检、客户心声分析和线索成单预测 | 百万人学AI评选
  19. 剑指offer笔记(六)字符串空格替换
  20. 国庆节的第三天,无聊的上班

热门文章

  1. 主机宝服务器默认页修改,主机宝服务器默认页
  2. yourenduwanglai的鬼话连篇(八)
  3. SEH结构体异常处理
  4. “误入”清华夸夸群?一行Python代码帮你写个机器人
  5. UUID是什么及其获取方式
  6. 大数据_云计算面试精华汇总
  7. 《逆袭大学》文摘——9.1 一切让代码行数说话
  8. linux chrome浏览器设置字体
  9. std::generate和std::generate_n
  10. 隐形的翅膀(玄学离散化)