我们有一个应用程序的一部分,比如说,它需要 20% 的时间读取超过内存限制的大量数据。虽然我们可以增加内存限制,但我们不愿意这样做,因为在大多数情况下它不需要高分配。
我们正在考虑使用定制的 java.util.List 实现在我们达到这样的峰值负载时假脱机到磁盘,但在较轻的情况下将保留在内存中。
数据一次加载到集合中,随后迭代和处理,然后丢弃。一旦它在集合中,就不需要对其进行排序。
有人对这种方法有优点/缺点吗?
是否有一个开源产品可以提供像这样的某种 List impl?
谢谢!
更新:
- 不要厚颜无耻,我所说的“巨大”是指超过我们愿意分配的内存量,而不会干扰同一硬件上的其他进程。你还需要什么其他细节?
- 该应用程序本质上是一个批处理器,它从多个数据库表中加载数据并在其上执行广泛的业务逻辑。列表中的所有数据都是必需的,因为聚合操作是完成逻辑的一部分。
- 我刚刚看到这篇文章,它提供了一个很好的选择:Java 中的 STXXL 等效项