症状
运行时抛出 StackOverflowError,堆栈重复同一方法或两个方法交替出现。这说明递归无界:要么基准条件缺失或不可达,要么数据成环导致 toString、equals 或序列化无限递归。即使基准正确,有限但极深的结构也可能耗尽栈。
诊断
读取重复帧定位递归调用;检查基准条件;对对象图方法检查是否处理环。
App 2>&1 | grep -A5 StackOverflow | head -20
根因
递归下降时未到达终止的基准条件,耗尽线程栈,原因是基准条件错误,或数据含环或深度过大。
修复
先修正基准条件,因为加大栈只会推迟失败;把深递归改为带显式栈的迭代;对图遍历加入环检测或基于恒等性的处理。只有深度合理且有限时才用更大的线程栈。
验证
用此前失败的输入重跑确认完成,再测一个成环或深嵌套用例确认新的处理生效。两者兼备说明递归已受控。
常见陷阱
仅靠 -Xss 加大栈会掩盖逻辑缺陷并在更深的输入上再次崩溃;应修正递归终止。