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

这篇具有很好参考价值的文章主要介绍了Handler dispatch failed; nested exception is java.lang.StackOverflowError 错误。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

遇见内存溢出问题—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://www.toymoban.com/news/detail-611281.html

到了这里,关于Handler dispatch failed; nested exception is java.lang.StackOverflowError 错误的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包