假设我的程序有一个简单的对象Key
,它可以用作更大对象的键。 (这超出了问题的范围)可能有成千上万的这些密钥飞来飞去,所以确保在这些对象的不同列表中存在最少量的重复是很重要的(所以我们不会堵塞没用无用物品的记忆。)
这里的问题是这些关键对象可以被分组,并且可以同时是多个组的一部分。让我们将这6个对象分成3个样本组:
有一个单独的并发列表可以跟踪所有组,并且可能会有数十个这些组不断创建和删除。但由于此组系统可用于查询操作,例如Which groups is this Key inside of?
,因此我们需要某种索引来快速从对象查询到组。
这是我们目前所拥有的系统:
ConcurrentMap<Key, Set<KeyGroup>>
,'全局映射'),使用密钥本身编制索引。每个KeyGroup
都包含一组Key
(该组内容)
当 X 键添加到 G 组时
:要查询某个键与哪个组不同,它将用作全局地图作为索引(Set<KeyGroup> groups = globalMap.get(key)
)
此系统的主要问题是Key
对象的重复:
Set<Key>
)Set<Key>
Keys
的数量。显然,我们正在考虑优化整个过程。由于我们使用的是Java,是否有可以管理这个系统的库(看起来有点像维恩图)更有效率,还避免了重复键?
我还认为,当密钥不再使用时,内置的Java垃圾收集不会清除整个混乱。我错了吗?当我分析程序使用的内存时,即使没有创建“新”组/添加密钥,内存中的密钥数量也会不断增加。