java.util.LinkedList导致无限循环/OutOfMemoryError

java.util.LinkedList导致无限循环/OutOfMemoryError,java,Java,我正在用我的一个类实现Cloneable,我需要创建一个java.util.LinkedList的浅拷贝(是的,只是浅拷贝)来实现它。我试着用 myList.clone() //myList is a java.util.LinkedList<myType> acType是一个内部枚举类型,fltPosition是一个float,它们初始化表中仅有的两个字段 当我调用LinkedList copy构造函数时,Note.clone()方法的最后一行出现了问题。这以前是对LinkedL

我正在用我的一个类实现Cloneable,我需要创建一个java.util.LinkedList的浅拷贝(是的,只是浅拷贝)来实现它。我试着用

myList.clone() //myList is a java.util.LinkedList<myType>
acType是一个内部枚举类型,fltPosition是一个float,它们初始化表中仅有的两个字段

当我调用LinkedList copy构造函数时,Note.clone()方法的最后一行出现了问题。这以前是对LinkedList.clone的调用,但为了避免此问题,我对其进行了更改。这里是这个错误的堆栈跟踪(这里没有错误,因为当它冻结时,我暂停了线程,而不是等待它用完内存,但是正如您所看到的,它在链接列表复制构造函数的中间)

链接列表(集合)行:115
注意.clone()行:86
注:简化(int)行:98
注:拆分(整数、列表、列表)行:179
ManagedPart$度量值。调整剩余(内部)行:378 ManagedPart$Measure.添加(注释)行:349
ManagedPart$Measure.access$1(ManagedPart$Measure,Note)行:345
ManagedPart.addNote(备注)行:216
PartEditor$EditPanel$3.actionPerformed(ActionEvent)行:104
JButton(AbstractButton).fireActionPerformed(ActionEvent)行:2012
AbstractButton$Handler.actionPerformed(ActionEvent)行:2335 DefaultButtonModel.fireActionPerformed(ActionEvent)行:404
DefaultButtonModel.setPressed(布尔)行:259
基本按钮Listener.mouseReleased(MouseEvent)行:253
JButton(Component).processMouseEvent(MouseEvent)行:6108
JButton(JComponent).processMouseEvent(MouseEvent)行:3276
JButton(Component).processEvent(AWTEvent)行:5873
JButton(Container).processEvent(AWTEvent)行:2105
JButton(组件).dispatchEventImpl(awteEvent)行:4469
JButton(Container).dispatchEventImpl(awteEvent)行:2163
JButton(组件).dispatchEvent(AWTEvent)行:4295
LightweightDispatcher.retargetMouseEvent(组件、int、MouseEvent)行:4461
LightweightDispatcher.processMouseEvent(MouseEvent)线路:4125 LightweightDispatcher.dispatchEvent(AWTEvent)线路:4055
MusedDesktopClient(容器).dispatchEventImpl(AWTEvent)行:2149
MusedDesktopClient(窗口)。dispatchEventImpl(AWTEvent)行:2478
MusedDesktopClient(组件).dispatchEvent(AWTEvent)行:4295
EventQueue.dispatchEvent(AWTEvent)行:604
EventDispatchThread.pumpOneEventForFilters(int)行:275
EventDispatchThread.PumpeEventsforFilter(int、Conditional、EventFilter)行:200
EventDispatchThread.pumpEventsForHierarchy(int、条件、组件)行:190
EventDispatchThread.pumpEvents(int,Conditional)行:185 EventDispatchThread.pumpEvents(有条件)行:177
EventDispatchThread.run()行:138

最近,我在Note.clone()I的第一行中的LinkedList的构造也遇到了类似的问题。e

List retAcc=newlinkedlist();
以下是该堆栈的堆栈跟踪:

线程“AWT-EventQueue-0”java.lang.OutOfMemoryError中出现异常:java堆空间 位于java.util.LinkedList。(LinkedList.java:95) 位于com.mused.util.noteMgmt.Note.clone(Note.java:84) 在com.mused.util.noteMgmt.Note.simplify上(Note.java:98) 位于com.mused.util.noteMgmt.Note.split(Note.java:179) 在 ManagedPart$Measure.adjustRemaining(ManagedPart.java:378) 位于com.mused.util.noteMgmt.ManagedPart$Measure.insert(ManagedPart.java:335) 位于com.mused.util.noteMgmt.ManagedPart.insertNote(ManagedPart.java:223) 位于com.mused.gui.editor.PartEditor.currentIndexChanged(PartEditor.java:161) 在com.mused.gui.NoteViewer.fireIndexChangeEvent上(NoteViewer.java:178) 位于com.mused.gui.NoteViewer.setCurrentIndex(NoteViewer.java:417) 位于com.mused.gui.NoteViewer.updateSelected(NoteViewer.java:627) 位于com.mused.gui.NoteViewer.mouseMoved(NoteViewer.java:725) 位于java.awt.Component.processMouseMotionEvent(Component.java:6153) 位于javax.swing.JComponent.processMouseMotionEvent(JComponent.java:3294) 位于java.awt.Component.processEvent(Component.java:5877) 位于java.awt.Container.processEvent(Container.java:2105) 位于java.awt.Component.dispatchEventImpl(Component.java:4469) 位于java.awt.Container.dispatchEventImpl(Container.java:2163) 位于java.awt.Component.dispatchEvent(Component.java:4295) 位于java.awt.LightweightDispatcher.RetargetMouseeEvent(Container.java:4461) 位于java.awt.LightweightDispatcher.ProcessMouseeEvent(Container.java:4138) 位于java.awt.LightweightDispatcher.dispatchEvent(Container.java:4055) 位于java.awt.Container.dispatchEventImpl(Container.java:2149) 位于java.awt.Window.dispatchEventImpl(Window.java:2478) 位于java.awt.Component.dispatchEvent(Component.java:4295) 位于java.awt.EventQueue.dispatchEvent(EventQueue.java:604) 在 java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:275) 在java.awt.EventDispatchThread.PumpeEventsforFilter(EventDispatchThread.java:200) 在 java.awt.EventDispatchThread.PumpeEventsforHierarchy(EventDispatchThread.java:190) 位于java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:185) 位于java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:177) 位于java.awt.EventDispatchThread.run(EventDispatchThread.java:138)


您是否检查了JVM的内存分配选项?特别是
-Xms
-Xmx
。默认情况下,您可以填充所有分配的内存。你能试一下吗

-Xms256m -Xmx1024m

看看它是否在同一个地方失败?

LinkedList::clone()没有问题。如果它挂起,那么您的列表已损坏,以某种方式形成了一个循环链接。以下是唯一相关代码的练习:

这与LinkedList::toArray()使用的算法相同,因此,如果clone()挂起,那么这也应该挂起:

System.out.println(Arrays.toString(myList.toArray()));
如果挂断,
public Accidental clone(){
    return new Accidental(acType,fltPosition);

} 
List<Accidental> retAcc=new LinkedList<Accidental>();
-Xms256m -Xmx1024m
for (Entry e = header.next; e != header; e = e.next)
    clone.add(e.element);
System.out.println(Arrays.toString(myList.toArray()));
List<myType> myList = Collections.synchronizedList(new LinkedList<myType>());