|
19 | 19 | import java.util.ArrayList;
|
20 | 20 | import java.util.Arrays;
|
21 | 21 | import java.util.Collections;
|
| 22 | +import java.util.LinkedHashSet; |
22 | 23 | import java.util.LinkedList;
|
23 | 24 | import java.util.List;
|
| 25 | +import java.util.Set; |
24 | 26 | import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
|
25 | 27 | import java.util.concurrent.atomic.AtomicLongFieldUpdater;
|
26 | 28 |
|
@@ -67,7 +69,7 @@ public class ClassImpl extends AbstractObjectImpl implements IClass, Comparable<
|
67 | 69 | protected volatile long totalSize;
|
68 | 70 | protected boolean isArrayType;
|
69 | 71 |
|
70 |
| - private List<IClass> subClasses; |
| 72 | + private Set<IClass> subClasses; |
71 | 73 |
|
72 | 74 | private Serializable cacheEntry;
|
73 | 75 |
|
@@ -392,14 +394,14 @@ void removeInstanceBulk(int instanceCount, long heapSize)
|
392 | 394 | @SuppressWarnings("unchecked")
|
393 | 395 | public List<IClass> getSubclasses()
|
394 | 396 | {
|
395 |
| - return subClasses != null ? subClasses : Collections.EMPTY_LIST; |
| 397 | + return (subClasses == null) ? Collections.emptyList() : new ArrayList<>(subClasses); |
396 | 398 | }
|
397 | 399 |
|
398 | 400 | @Override
|
399 | 401 | public List<IClass> getAllSubclasses()
|
400 | 402 | {
|
401 | 403 | if (subClasses == null || subClasses.isEmpty())
|
402 |
| - return new ArrayList<IClass>(); |
| 404 | + return Collections.emptyList(); |
403 | 405 |
|
404 | 406 | List<IClass> answer = new ArrayList<IClass>(subClasses.size() * 2);
|
405 | 407 | answer.addAll(this.subClasses);
|
@@ -453,7 +455,7 @@ public int getClassLoaderId()
|
453 | 455 | public void addSubClass(ClassImpl clazz)
|
454 | 456 | {
|
455 | 457 | if (subClasses == null)
|
456 |
| - subClasses = new ArrayList<IClass>(); |
| 458 | + subClasses = new LinkedHashSet<IClass>(); |
457 | 459 | subClasses.add(clazz);
|
458 | 460 | }
|
459 | 461 |
|
|
0 commit comments