gpt4 book ai didi

java - 无法追踪堆栈溢出错误的来源

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:24:32 27 4
gpt4 key购买 nike

我有一个作为服务运行的 Java 应用程序。运行几天后,出现堆栈溢出错误。问题是我源代码中产生错误的堆栈帧不在 printStackTrace 函数报告的错误中。我不知道如何找到问题所在。

这是 printStackTrace 的结果:

java.lang.StackOverflowError
at java.util.LinkedList.listIterator(LinkedList.java:684)
at java.util.SubList$1.<init>(AbstractList.java:700)
at java.util.SubList.listIterator(AbstractList.java:699)
at java.util.SubList$1.<init>(AbstractList.java:700)
at java.util.SubList.listIterator(AbstractList.java:699)
at java.util.SubList$1.<init>(AbstractList.java:700)
at java.util.SubList.listIterator(AbstractList.java:699)
... (this is repeated hundreds of times)
at java.util.SubList.listIterator(AbstractList.java:699)
at java.util.SubList$1.<init>(AbstractList.java:700)
at java.util.SubList.listIterator(AbstractList.java:699)
at java.util.SubList$1.<init>(AbstractList.java:700)

最佳答案

您的问题可以重现如下:

List<String> l = ...;

for (int i = 0; i < 2800; i++) {
l = l.subList(...);
}
l.listIterator(...);

因此,请注意 subList() 的所有调用,并确保它们不会像上面那样形成一长串子列表。

这样的链是一个递归结构(每个子列表都保留对其父列表的引用),并且在很长的链上调用 listIterator() 会导致非常深的递归,从而导致堆栈溢出。

关于java - 无法追踪堆栈溢出错误的来源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7818990/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com