我正在顺序处理一个大文件,我想在内存中保留一大块文件,在64位系统上可以使用16gb ram。
快速而肮脏的方法是这样做,简单地将输入流包装到缓冲的输入流中,遗憾的是,这只给了我一个2gb的缓冲区。我想在记忆中有更多的东西,我有什么替代品?
答案 0 :(得分:3)
让操作系统处理缓冲文件怎么样?你有没有检查过不将整个文件复制到JVM内存中的性能影响是什么?
编辑:然后您可以使用RandomAccessFile或FileChannel有效地将文件的必要部分读入JVM内存。
答案 1 :(得分:3)
您是否考虑过java.nio中的MappedByteBuffer?这是我的头脑,但也许这就是你要找的东西。
答案 2 :(得分:1)
我怀疑无论如何一次缓冲超过2gb将是一个巨大的胜利。根据您正在进行的处理量,您可能几乎以您处理的速度读取。为了加快速度,您可以尝试使用双线程生产者 - 消费者模型(一个线程读取文件并将数据交给另一个线程进行处理)。
答案 3 :(得分:1)
操作系统将尽可能多地缓存文件,因此尝试超越缓存管理器可能不会让你受益匪浅。
从性能角度来看,通过将字节保留在JVM之外(在OS和JVM之间传输大量数据的速度相对较慢),您将获得更好的服务。您可以使用由直接内存块支持的MappedByteBuffer来实现此目标。
这是一篇相关的文章类型:article
答案 4 :(得分:0)
我认为有64位JVM支持非标准限制。
您可以尝试缓冲块。