我正在开发一个在内存中需要大量对象的应用程序。最大的结构之一是
类型Map<String,Set<OwnObject>> (with Set as HashSet)
OwnObject是表示数据库中记录的重量级对象。该应用程序可以工作,但内存占用相当大。从2001年开始阅读this Java Specialists时事通讯,我已经分析了上面我的大型结构的内存使用情况。 HashSet在后面使用了一个HashMap,而HashMap又是一个非常重量级的对象,我想这就是我大部分额外内存的用武之地。
尝试优化结构的内存使用情况,我尝试了多个版本:
Map<String,List<OwnObject>> (with List as ArrayList)
Map<String,OwnObject[]>
两者都有效,并且两者都比使用Set&lt;&gt;的版本更精益。但是,我想保留Set合约(条目的唯一性)。
一种方法是自己实现逻辑。我可以扩展ArrayList并确保add()中的契约。
是否有实现轻量级集合的框架符合Set契约?或者,我是否会错过我可以使用的Java集合中的某些东西而不确保自己的独特性?
答案 0 :(得分:0)
我实施的解决方案如下:
Map<String,OwnObject[]>
使用Arrays.binarySearch()和2个切片System.arraysCopy()来完成对数组的添加和删除,通过它们可以在侧面进行排序和唯一性。