자식이 목록에 저장되는 거대한 트리 구조를 반복하는 단일 스레드 응용 프로그램이 있습니다. 반복자는 항상 변경 불가능한리스트에 운항합니다 : 단일 스레드의 unmodifiableList에서 ConcurrentModificationException
public List<HierarchyNode> getChildren() {
return Collections.unmodifiableList(children);
}
아직도 내가 변경 불가능한 목록에서 불가능하다고 생각 몇 가지 점에서 ConcurrentModificationException를 얻을? 반복은 방문자를 사용하여 수행됩니다 ... 어떤 아이디어가 가능합니까?
편집 : 어쩌면 이것은 thetree의 메모리 사용량이 상당히 큰 사실과 관련이
private final List<HierarchyNode> children;
(> 4기가바이트 :이 목록을 수정할 수있는 단 하나의 목록을 잡고 클래스의 생성자입니다)?
추적 :
Testcase: testParserSingleFile(General.NetlistBuilder): Caused an ERROR
null
java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:819)
at java.util.ArrayList$Itr.next(ArrayList.java:791)
at java.util.Collections$UnmodifiableCollection$1.next(Collections.java:1067)
at com.bevm.hierarchy.HierarchyNodeVisitorImplementation.visitArchitectureNode(HierarchyNodeVisitorImplementation.java:20)
at com.bevm.semantics.netlist.NetlistBuilder.visitArchitectureNode(NetlistBuilder.java:40)
at com.bevm.hierarchy.ArchitectureNode.accept(ArchitectureNode.java:25)
at com.bevm.hierarchy.HierarchyNodeVisitorImplementation.visitEntityNode(HierarchyNodeVisitorImplementation.java:33)
at com.bevm.semantics.netlist.NetlistBuilder.visitEntityNode(NetlistBuilder.java:33)
at com.bevm.hierarchy.EntityNode.accept(EntityNode.java:33)
at com.bevm.hierarchy.HierarchyNodeVisitorImplementation.visitComponentNode(HierarchyNodeVisitorImplementation.java:27)
at com.bevm.hierarchy.ComponentNode.accept(ComponentNode.java:25)
at com.bevm.hierarchy.HierarchyNodeVisitorImplementation.visitInstanceNode(HierarchyNodeVisitorImplementation.java:45)
at com.bevm.semantics.netlist.NetlistBuilder.visitInstanceNode(NetlistBuilder.java:85)
at com.bevm.hierarchy.InstanceNode.accept(InstanceNode.java:89)
at com.bevm.hierarchy.HierarchyNodeVisitorImplementation.visitArchitectureNode(HierarchyNodeVisitorImplementation.java:21)
at com.bevm.semantics.netlist.NetlistBuilder.visitArchitectureNode(NetlistBuilder.java:40)
at com.bevm.hierarchy.ArchitectureNode.accept(ArchitectureNode.java:25)
at com.bevm.hierarchy.HierarchyNodeVisitorImplementation.visitEntityNode(HierarchyNodeVisitorImplementation.java:33)
at com.bevm.semantics.netlist.NetlistBuilder.visitEntityNode(NetlistBuilder.java:33)
at com.bevm.hierarchy.EntityNode.accept(EntityNode.java:33)
at com.bevm.hierarchy.HierarchyNodeVisitorImplementation.visitComponentNode(HierarchyNodeVisitorImplementation.java:27)
at com.bevm.hierarchy.ComponentNode.accept(ComponentNode.java:25)
at com.bevm.hierarchy.HierarchyNodeVisitorImplementation.visitInstanceNode(HierarchyNodeVisitorImplementation.java:45)
at com.bevm.semantics.netlist.NetlistBuilder.visitInstanceNode(NetlistBuilder.java:85)
at com.bevm.hierarchy.InstanceNode.accept(InstanceNode.java:89)
at com.bevm.hierarchy.HierarchyNodeVisitorImplementation.visitArchitectureNode(HierarchyNodeVisitorImplementation.java:21)
at com.bevm.semantics.netlist.NetlistBuilder.visitArchitectureNode(NetlistBuilder.java:40)
at com.bevm.hierarchy.ArchitectureNode.accept(ArchitectureNode.java:25)
at com.bevm.hierarchy.HierarchyNodeVisitorImplementation.visitEntityNode(HierarchyNodeVisitorImplementation.java:33)
at com.bevm.semantics.netlist.NetlistBuilder.visitEntityNode(NetlistBuilder.java:33)
at com.bevm.hierarchy.EntityNode.accept(EntityNode.java:33)
at com.bevm.hierarchy.HierarchyNodeVisitorImplementation.visitComponentNode(HierarchyNodeVisitorImplementation.java:27)
at com.bevm.hierarchy.ComponentNode.accept(ComponentNode.java:25)
at com.bevm.hierarchy.HierarchyNodeVisitorImplementation.visitInstanceNode(HierarchyNodeVisitorImplementation.java:45)
at com.bevm.semantics.netlist.NetlistBuilder.visitInstanceNode(NetlistBuilder.java:85)
at com.bevm.hierarchy.InstanceNode.accept(InstanceNode.java:89)
at com.bevm.hierarchy.HierarchyNodeVisitorImplementation.visitGenerateNode(HierarchyNodeVisitorImplementation.java:39)
at com.bevm.semantics.netlist.NetlistBuilder.visitGenerateNode(NetlistBuilder.java:79)
at com.bevm.hierarchy.GenerateNode.accept(GenerateNode.java:27)
at com.bevm.hierarchy.HierarchyNodeVisitorImplementation.visitArchitectureNode(HierarchyNodeVisitorImplementation.java:21)
at com.bevm.semantics.netlist.NetlistBuilder.visitArchitectureNode(NetlistBuilder.java:40)
at com.bevm.hierarchy.ArchitectureNode.accept(ArchitectureNode.java:25)
at com.bevm.hierarchy.HierarchyNodeVisitorImplementation.visitEntityNode(HierarchyNodeVisitorImplementation.java:33)
at com.bevm.semantics.netlist.NetlistBuilder.visitEntityNode(NetlistBuilder.java:33)
at com.bevm.hierarchy.EntityNode.accept(EntityNode.java:33)
at com.beckhoff.vmagic.hierarchy.HierarchyNodeVisitorImplementation.visit(HierarchyNodeVisitorImplementation.java:15)
at General.NetlistBuilder.testParserSingleFile(NetlistBuilder.java:125)
이전에 같은 문제에 직면했습니다. –
반복 코드를 표시 할 수 있습니까? – CAMOBAP
전체 스택 추적을 작성하십시오. –