在重新发明任何可能已经被多次发明的轮子之前,我正在寻找一个库,可以让我处理潜在的巨大数组char(而不是Char),同时保持堆开销和不必要的堆分配。char/byte/int大型数组的内存保存存储的最佳库?
这意味着阵列实现应该允许
- 访问的元素作为collection.get(长指数)
- 商店的alement作为collection.put(长索引,CHAR什么),并自动调整大小分配该阵列如果需要
- 重新调整阵列大小的恒定大小块我想选择,例如2^14个元素。
第3点对我的目的是重要的:许多实现只是通过分配一些对当前大小加倍的东西来重新调整集合的大小,复制并丢弃旧的大小。如果堆集非常大并且下一个调整大小操作需要堆中仍然存在全部或多个操作,那么这很糟糕,但堆中仍然可能绰绰有余。
此外,索引类型应该很长,以便可以在数组中存储多于2 ^(32-1)个元素。
所以,如果我要实现这一点,我可能会使用一个可选块大小的动态数组数组。第一级数组可能会以旧的方式调整大小(它不会包含太多的元素),而第二级数组总是会有一些固定的块大小为2^N。
是否有人知道这样做或类似内存效率的库?
我已经考虑过Trove,但不幸的是,集合调整策略是指数级的:每次需要调整大小时,集合大小都会增加一倍。对于非常大的集合来说,这是一个糟糕的策略,可能会浪费50%的堆。 – Johsm