2013-04-02 21 views
3

在重新发明任何可能已经被多次发明的轮子之前,我正在寻找一个库,可以让我处理潜在的巨大数组char(而不是Char),同时保持堆开销和不必要的堆分配。char/byte/int大型数组的内存保存存储的最佳库?

这意味着阵列实现应该允许

  1. 访问的元素作为collection.get(长指数)
  2. 商店的alement作为collection.put(长索引,CHAR什么),并自动调整大小分配该阵列如果需要
  3. 重新调整阵列大小的恒定大小块我想选择,例如2^14个元素。

第3点对我的目的是重要的:许多实现只是通过分配一些对当前大小加倍的东西来重新调整集合的大小,复制并丢弃旧的大小。如果堆集非常大并且下一个调整大小操作需要堆中仍然存在全部或多个操作,那么这很糟糕,但堆中仍然可能绰绰有余。

此外,索引类型应该很长,以便可以在数组中存储多于2 ^(32-1)个元素。

所以,如果我要实现这一点,我可能会使用一个可选块大小的动态数组数组。第一级数组可能会以旧的方式调整大小(它不会包含太多的元素),而第二级数组总是会有一些固定的块大小为2^N。

是否有人知道这样做或类似内存效率的库?

回答

0

如果您需要服务,请尝试使用Voldemort(其LinkedIn项目)的用法类似于从Map中获取(取放)。

您可以配置所需的内存。这会将数据存储在文件系统中(在内部使用bdb)。对于我的测试,它给出的性能结果与HashMap一样好。

实际上可以使用任何Key Value存储。我相信Redis也是一个不错的选择。但我没用过它,所以不能评论

0

如果你想有可嵌入的方法,那么我会推荐Trove框架。它速度快,重量轻,面向原始存储和大量数据。

+0

我已经考虑过Trove,但不幸的是,集合调整策略是指数级的:每次需要调整大小时,集合大小都会增加一倍。对于非常大的集合来说,这是一个糟糕的策略,可能会浪费50%的堆。 – Johsm