正在寻找一个可以处理大量数据的java.util.List实现

正在寻找一个可以处理大量数据的java.util.List实现,java,Java,我正在尝试修复遗留系统的OOM问题。 经过分析,我发现它可以从数据库中查询出大量数据,并将它们存储在ArrayList中。 但是因为大多数文档都丢失了,我们不能做太多的修改 所以我想寻找一个列表实现,它可以处理大量数据。 例如:我可以将所有数据存储在一个文件中,只需在内存中保留1000个元素。如果迭代器或get()尝试访问不在内存中的数据,它可以自动从磁盘检索数据 谢谢你的建议 AList就是它所说的——一个数据列表,可以是有界的(数组),也可以是无界的(ArrayList/LinkedList

我正在尝试修复遗留系统的OOM问题。 经过分析,我发现它可以从数据库中查询出大量数据,并将它们存储在ArrayList中。 但是因为大多数文档都丢失了,我们不能做太多的修改

所以我想寻找一个列表实现,它可以处理大量数据。 例如:我可以将所有数据存储在一个文件中,只需在内存中保留1000个元素。如果迭代器或get()尝试访问不在内存中的数据,它可以自动从磁盘检索数据


谢谢你的建议

A
List
就是它所说的——一个数据列表,可以是有界的(数组),也可以是无界的(ArrayList/LinkedList等等)。因此,没有任何列表类型可以处理庞大的数据,特别是当庞大的未定义或未明确定义时

可以采用以下方法:

  • 考虑使用可配置的限制来对来自数据库的数据进行分页。每次您的应用程序都保证从数据库中最多读取这么多行,并因此将它们作为链表返回
  • 如果可能,评估代码的使用情况-在什么条件下调用此代码?此外,是否有从数据库预加载数据的预成熟优化,目的是在搜索值时避免后续的DB调用?如果这些条件是真的-那么IMO,必须消除这种过早的优化;您可以在数据库中查询特定范围的密钥,DB技术已经足够成熟,可以很好地处理这一问题。如果不可能进行此更改,则B树型数据结构将更有帮助,其中键中包含从数据库加载的行的主键。只有在创建的树中存在搜索键时,才能从数据库中检索数据
  • 最后一个也是最不推荐的(但最坏的情况)选项是调整JVM内存参数以适应数据。然而,这是一个脆弱而耗时的过程,迟早会失败
  • 总而言之,每个数据结构和系统在可用的内存和其他计算资源方面都有其局限性。因此,了解被测系统的当前功能和限制,然后开发适当的解决方案来扩展应用程序是很重要的


    希望这能帮助您找到问题的解决方案。

    看起来您正试图使用列表来完成数据库应该做的事情。你可能把精力集中在错误的事情上。考虑一下改进数据库的使用,这样你的程序就不需要把大量的信息放在列表中。谢谢你的建议,我同意。然而,它是一个遗留系统,我们没有完整的文档,也没有完整的源代码。因此,我们必须找到一种在不太改变原有架构的情况下解决OOM问题的方法。谢谢您的进一步建议。@LeonChen您是否检查了问题中提到的链接:?