我的 Java 应用程序使用内存映射文件(MappedByteBuffer、FileChannel 和 RandomAccessFile)处理大型二进制数据文件。它经常需要增加二进制文件——我目前的方法是用更大的区域重新映射文件。
它有效,但是有两个问题
- 随着文件变大,增长需要越来越多的时间。
- 如果增长非常迅速(EG 在 while(true) 循环中),JVM 将在重新映射操作完成大约 30,000 次后永远挂起。
有哪些替代方法,最好的方法是什么?
我也无法弄清楚为什么会出现第二个问题。还请就该问题提出您的意见。
谢谢!
用于增长文件的当前代码(如果有帮助):
(set! data (.map ^FileChannel data-fc FileChannel$MapMode/READ_WRITE
0 (+ (.limit ^MappedByteBuffer data) (+ DOC-HDR room))))