2

我正在按顺序处理一个大文件,我想将其中的一大块保存在内存中,在 64 位系统上可用 16gb 内存。

一种快速而肮脏的方法是这样做,只需将输入流包装到缓冲输入流中,不幸的是,这只给了我一个 2gb 的缓冲区。我想有更多的记忆,我有什么选择?

4

5 回答 5

3

让操作系统处理文件的缓冲怎么样?您是否检查过不将整个文件复制到 JVM 内存中对性能的影响是什么?

编辑:然后您可以使用 RandomAccessFile 或 FileChannel 有效地将文件的必要部分读入 JVM 内存。

于 2008-09-26T21:16:03.907 回答
3

你考虑过 java.nio 中的 MappedByteBuffer 吗?它在我的头上,但也许这就是你正在寻找的。

于 2008-09-26T21:17:31.343 回答
1

我怀疑一次缓冲超过 2GB 将是一个巨大的胜利。根据您正在执行的处理量,您可能能够以几乎与处理速度一样快的速度阅读。为了加快速度,您可以尝试使用双线程生产者-消费者模型(一个线程读取文件并将数据交给另一个线程进行处理)。

于 2008-09-26T21:34:28.310 回答
1

操作系统将尽可能多地缓存文件,因此试图智取缓存管理器可能不会让你得到太多。

从性能的角度来看,将字节保留在 JVM 之外会得到更好的服务(在操作系统和 JVM 之间传输大量数据相对较慢)。您可以通过使用由直接内存块支持的 MappedByteBuffer 来实现此目标。

这是一篇相关的文章类型: 文章

于 2008-09-27T03:36:30.357 回答
0

我认为有 64 位 JVM 将支持非标准限制。

您可以尝试缓冲块。

于 2008-09-26T21:18:08.130 回答