![]() |
1
4
所以我假设你有一张
一些可能性-
|
![]() |
2
12
立即建议我使用 FlyWeight pattern |
![]() |
3
5
收藏 应该特别注意占用的空间(如果您坚持使用基本类型,我认为它们还具有定制的数据结构)。。看一看 here . 否则你可以试试 Apache collections .. 做你的基准! 不管怎样,如果有很多对相同元素的引用,请尝试设计一些合适的模式(比如 flyweight ) |
![]() |
4
3
如果字符串经常重复,可以使用字符串池来减少字符串的重复。其他不可变类型的对象池可能有助于减少内存消耗。 编辑: 您可以将数据结构为基于行或基于列。如果它基于行(每行一个单元格数组),则添加/删除行只是删除此行的问题。如果它基于列,则可以为每列设置一个数组。这可以使处理原始类型更加有效。i、 e.可以有一列是int[],另一列是double[],对于整列来说,更常见的是具有相同的数据类型,而不是对于整行具有相同的数据类型。 但是,无论您以何种方式构造数据,都将对其进行行或列修改,并且执行其他类型的添加/删除操作将导致整个数据集的重新生成。 (我要做的是使用基于行的数据并在末尾添加列,假设行不够长,则该列具有默认值,这样可以避免在添加列时重新生成。与其删除列,我有办法忽略它) |
![]() |
5
2
Table 接口和基于哈希的实现。似乎很适合你的问题。请注意,这仍然标记为beta。 |
![]() |
6
2
Chronicle Map
每个条目的开销可能小于20字节(请参见
a test
另外,Chronicle映射将键和值存储在堆外,因此它不存储对象头,而对象头不计入上面HashMap的开销。编年史地图 integrates 具有 Chronicle-Values suggested by Brian Agnew 另一个答案。 |
![]() |
7
1
一种选择是使用一个带有复合键的大型散列(组合行和列)。不过,这并不能使整行的操作非常有效。
另外,由于您没有提到添加单元格的操作,因此可以只使用必需的内部存储创建散列(
|
![]() |
8
1
我一直在尝试使用
对于相同的数据,它使用的内存大约减少了10%,加载速度提高了15%,并且提供了一些聪明的操作方法。但仍对其他选择感兴趣。 |
![]() |
9
0
ArrayList的(链接)哈希映射 (每个ArrayList都是一列)。
我将添加一个从字段名到列号的双映射,以及一些从不抛出
你也可以使用
我怀疑这一点,特别是如果它们是字符串(它们是内部化的),并且您的集合将存储对它们的引用。 |
![]() |
10
0
为什么不尝试使用如下缓存实现
EHCache
当我遇到同样的情况时,这对我来说非常有效。
一旦应用程序使用的字节溢出缓存中配置的字节,那么缓存实现将负责将数据写入磁盘。还可以使用最近使用的算法配置对象写入磁盘的时间量。
使用这种类型的缓存实现,可以确保避免任何内存不足错误。
它只会稍微增加应用程序的IO操作。
|
![]() |
aoyuan zhu · 为什么guava joiner实现私有方法iterable(final Object first,final Object second,final Object[]rest)? 7 年前 |
![]() |
BlackEye · NoSuchMethodError和如何读取 7 年前 |
![]() |
user2057006 · 不区分大小写的显式排序番石榴 7 年前 |