文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Handler dispatch failed; nested exception is java.lang.StackOverflowError 错误

2023-09-07 09:45

关注

遇见内存溢出问题—jvm

问题描述

`

Handler dispatch failed; nested exception is java.lang.StackOverflowError

原因分析:

提示:StackOverflowError栈内存溢出
StackOverflowError 是一个java中常出现的错误:在jvm运行时的数据区域中有一个java虚拟机栈,当执行java方法时会进行压栈弹栈的操作。在栈中会保存局部变量,操作数栈,方法出口等等。jvm规定了栈的最大深度,当执行时栈的深度大于了规定的深度,就会抛出StackOverflowError错误。

private List<String> getChildPositionIds(String id,List<String> ids) {List<Position> positions = dao.getChildPositionByPId(id);if(CollUtil.isNotEmpty(childPositions)) {//递归方法出口positions.stream().forEach(childPosition -> {String cId = childPosition.getId();ids.add(childId);//递归调用this.getChildPositionIds(cId, ids);});}return ids;}

解决方案:

提示:递归进入死循环了,找到死循环位置修改(我这里是递归方法出现死循环问题,不作详细说明,结合自己代码看问题)
尝试增加堆栈大小(不建议这样做,找到问题才能解决好问题,才是关键)
总结:调用自己,无限递归,栈当然会溢出,所以一般情况下是排查递归方法中问题,或者是数据问题有可能数据有依赖(比如:岗位添加下级不能选择该岗位上级来添加,会形成闭环(用数据关系parent_id来实现),这种属于数据之间的关系或者说逻辑关系造成的)。也有其他的,暂时没遇到

或者:
错误实现的递归(即没有终止条件)
类之间的循环依赖关系
在同一个类中实例化一个类作为该类的实例变量

来源地址:https://blog.csdn.net/qq_36255346/article/details/128955437

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯