在一次技术讨论中,我被要求为下面的场景提供一个解决方案,而不使用任何处理类似情况的标准java库
如何处理不适合jvm可用内存的数组
你如何处理一个大文件,比如说20 gb,它不适合在可用内存中。
我可以想出下列解决办法
获取数组的长度,并使用部分长度处理数组(对于长度为/4的数组的Ex4迭代)
原始文件可以使用split命令(或在各自的操作系统环境中类似的命令)拆分为多个部分。处理单个较小的文件并生成中间结果(例如数据聚合)。完成单个文件处理后,根据中间结果文件的最终大小,一次性处理所有结果文件或再次应用迭代处理。
不过,我想知道是否有更好的方法。另外,如果这样的问题是不适合这个论坛,那么请让我知道,我会删除这个问题。虽然我发现了一些谷歌文章与解决方案,但它谈论的解决方案已经提供了一些图书馆,因此张贴在这里。
1条答案
按热度按时间af7jpaap1#
一种解决方案是堆外内存。可以Map到直接内存或磁盘。你可以从这里得到一些灵感https://mechanical-sympathy.blogspot.com/2012/10/compact-off-heap-structurestuples-in.html