You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java:通过UUID与DisplayName访问同一对象,如何优化内存占用?

优化内存存储方案的建议

首先,你的场景里数据加载后就不再变更,所以WeakReference完全没必要——因为这些Cosmetic对象从启动到结束都会被cosmeticIDs强引用,根本不会被GC回收,用WeakReference反而多了一层包装,既浪费内存又增加了访问时拆包的开销。

最优实现方式

  • 调整第二个Map的类型,直接存储Cosmetic的强引用:
    private Map<String, Cosmetic> cosmeticIDs;
    private Map<String, Cosmetic> cosmeticsDisplayNames;
    
  • 插入数据时直接存入对象本身(两个Map指向同一个实例,内存仅存一份Cosmetic对象):
    Cosmetic cosmetic = new Cosmetic(uuid, displayName);
    cosmeticIDs.put(cosmetic.getID(), cosmetic);
    cosmeticsDisplayNames.put(cosmetic.getDisplayName(), cosmetic);
    

额外注意事项

如果存在多个Cosmetic对应同一个DisplayName的场景,需要将第二个Map改为Map<String, List<Cosmetic>>,把相同DisplayName的对象统一存入列表中,避免键值覆盖问题。

内容的提问来源于stack exchange,提问作者Benna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 02:37:38