答案 0 :(得分:2)
LinkedList :: clone()没有错。如果它挂起,那么你的列表已经损坏,不知何故形成了一个循环链接。以下是来自java/util/LinkedList.java的唯一相关代码的摘要:
for (Entry e = header.next; e != header; e = e.next)
clone.add(e.element);
这与LinkedList :: toArray()使用的算法相同,因此如果clone()挂起,那么应该这样:
System.out.println(Arrays.toString(myList.toArray()));
如果挂起,则表明您的列表已损坏。最可能的罪魁祸首是同步问题。 LinkedList不是线程安全的。尝试同步您的声明:
List<myType> myList = Collections.synchronizedList(new LinkedList<myType>());
答案 1 :(得分:0)
您是否检查了JVM的内存分配选项?具体为-Xms
和-Xmx
。你可能刚刚填满了默认分配的所有内存。你能试试
-Xms256m -Xmx1024m
并查看它是否在同一个地方失败了?
答案 2 :(得分:0)
好的,所以我明白了。我曾经以为我在做一些导致LinkedList无限循环的事情,但实际发生的是我写了一个无限循环,其中包括对LinkedList方法的调用,而且只是当我暂停线程或系统用尽时内存,它是在执行LinkedList方法期间 显然,这些必须花费更长的时间来执行循环内的其余代码或其他东西。因为当我查看堆栈跟踪时它总是在LinkedList中,我认为我在某种程度上打破了LinkedList,实际上我的破解代码只是反复调用LinkedList方法,直到我停止它或内存不足。