2

我正在处理单个数据结构的一些相对较大的实例数组。每个实例由大约六个字段组成。数组占用了大量空间,我发现即使在使用 7 GB 堆空间的 vm 运行时,我的开发环境也会死机。虽然我可以搬到更大的机器上,但我也在探索如何在不影响性能的情况下节省空间。在检查数据时,我注意到数据中有大量冗余。对于大约 80% 的数据,六个字段中有四个具有相同的值。

这给了我一个想法,我可以分离这些具有冗余信息的实例,并将它们放在数据结构的特殊形式(原始数据结构的扩展)中,其中四个字段包含相同信息的静态字段。我的假设是静态字段只会在内存中实例化一次,因此即使这些信息由 100K 对象共享,这些字段也会占用与仅实例化一个数据结构时相同的内存。因此,我应该能够实现显着的内存节省。

这是一个正确的假设吗?

谢谢,

艾略特

4

3 回答 3

2

我不知道您的特定数据结构和可能的算法来构建享元,但我会建议一个: http ://en.wikipedia.org/wiki/Flyweight_pattern

该模式非常接近您正在考虑的解决方案,并为您提供了“如何获取数据”的良好分离。

于 2012-10-24T04:26:44.133 回答
0

如何维护地图中冗余的字段并且只引用数组中的这些值。可以通过减小单个数据结构的大小来节省空间。

于 2012-10-24T04:24:29.187 回答
0

尝试使用 HashMap 进行存储。这就是快速找到相等对象的方法。您需要考虑如何定义对象的 hashCode 函数。

于 2012-10-24T04:33:45.270 回答