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来实现),这种属于数据之间的关系或者说逻辑关系造成的)。也有其他的,暂时没遇到
或者:
错误实现的递归(即没有终止条件)
类之间的循环依赖关系
在同一个类中实例化一个类作为该类的实例变量
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)