Java中的对象分组和对象组查询
假设我的程序有一个简单的对象,Java中的对象分组和对象组查询,java,memory,data-structures,structure,Java,Memory,Data Structures,Structure,假设我的程序有一个简单的对象,Key,可以用作较大对象的键。(这超出了问题的范围)可能会有成百上千的这些键四处飞舞,因此确保这些对象的不同列表中的重复量最小是很重要的(这样我们就不会用无用的对象阻塞内存) 这里的问题是这些关键对象可能被分组,并且可能同时是多个组的一部分。让我们将这6个对象分成3个样本组: 有一个单一的、并发的列表来跟踪所有的组,并且可能会不断创建和删除几十个这样的组。但是,由于该组系统可用于查询操作,例如,该键在哪个组中?,因此我们需要某种索引来快速地从对象查询到组 这是我
Key
,可以用作较大对象的键。(这超出了问题的范围)可能会有成百上千的这些键四处飞舞,因此确保这些对象的不同列表中的重复量最小是很重要的(这样我们就不会用无用的对象阻塞内存)
这里的问题是这些关键对象可能被分组,并且可能同时是多个组的一部分。让我们将这6个对象分成3个样本组:
有一个单一的、并发的列表来跟踪所有的组,并且可能会不断创建和删除几十个这样的组。但是,由于该组系统可用于查询操作,例如,该键在哪个组中?
,因此我们需要某种索引来快速地从对象查询到组
这是我们目前拥有的系统:
- 一个并发映射(
,“全局映射”),它存储所有组,并使用键本身编制索引ConcurrentMap
- 每个
包含一组键组
(组的内容)键
- 将键X添加到组G时:
- 键X将添加到组的键集
- 将组G添加到全局映射中,并使用键K作为索引
- 要查询某个键所属的组,将其用作全局映射的索引(
)Set groups=globalMap.get(key)
该系统的主要问题是
键
对象的大量重复:
- 全局地图具有索引地图的关键对象(即
)集
- 每个组包含自己的
集合
- 由于每个组都有自己的集合,每个键都有自己的组集合,因此会以指数方式增加
键的数量
我还认为,当密钥不再使用时,内置的Java垃圾收集并不能清除整个混乱。我错了吗?当我分析程序使用的内存时,内存中的密钥数量不断增加,即使没有创建“新”组/添加密钥。您的描述有点混乱。我想您是说您希望有效地维护两个索引:一个表示每个组中包含哪些键,另一个表示每个键属于哪个组。是吗?@JimMischel是的,没错你的描述有点混乱。我想您是说您希望有效地维护两个索引:一个表示每个组中包含哪些键,另一个表示每个键属于哪个组。对吗?@JimMischel是的,对