diff --git a/storage/src/main/java/com/zfoo/storage/manager/AbstractStorage.java b/storage/src/main/java/com/zfoo/storage/manager/AbstractStorage.java index d8bacace..72eaf7bf 100644 --- a/storage/src/main/java/com/zfoo/storage/manager/AbstractStorage.java +++ b/storage/src/main/java/com/zfoo/storage/manager/AbstractStorage.java @@ -35,9 +35,11 @@ import java.util.*; * @author godotg */ public abstract class AbstractStorage implements IStorage { - // 非唯一索引 + // func index of caches + private ConcurrentReferenceHashMap, String> funcCaches = new ConcurrentReferenceHashMap<>(); + // non-unique index (非唯一索引) protected Map>> indexMap = new HashMap<>(); - // 唯一索引 + // unique index (唯一索引) protected Map> uniqueIndexMap = new HashMap<>(); protected Class clazz; @@ -47,8 +49,6 @@ public abstract class AbstractStorage implements IStorage { // CN: 没有被使用的配置表会清除data数据,以达到节省内存的目的 protected boolean recycle = true; - private ConcurrentReferenceHashMap, String> funcCaches = new ConcurrentReferenceHashMap<>(); - public static AbstractStorage parse(InputStream inputStream, Class resourceClazz, String suffix) { var idDef = IdDef.valueOf(resourceClazz); var indexDefMap = Collections.unmodifiableMap(IndexDef.createResourceIndexes(resourceClazz)); @@ -134,11 +134,13 @@ public abstract class AbstractStorage implements IStorage { @Override public void recycleStorage() { - recycle = true; + funcCaches = null; indexMap = null; uniqueIndexMap = null; + clazz = null; idDef = null; indexDefMap = null; + recycle = true; } @Override @@ -204,12 +206,17 @@ public abstract class AbstractStorage implements IStorage { if (r == null) { continue; } + var count = 0; for (var field : fields) { var fieldValue = ReflectionUtils.getField(field, value); if (Objects.equals(r, fieldValue) && r.getClass() == fieldValue.getClass()) { indexName = field.getName(); + count++; } } + if (count == 1) { + break; + } } } catch (Exception e) { }