私のJavaアプリケーションは、メモリマップトファイル(MappedByteBuffer、FileChannel、RandomAccessFile)を使用して大きなバイナリデータファイルを処理します。多くの場合、バイナリファイルを拡張する必要があります。現在のアプローチは、ファイルをより大きな領域に再マップすることです。
それは動作しますが、2つの問題があります
- ファイルが大きくなるにつれて、成長にはますます時間がかかります。
- グローが非常に高速に実行される場合(たとえば、while(true)ループ内)、再マップ操作が約30,000回以上実行された後、JVMは永久にハングします。
代替アプローチは何ですか、そしてこれを行うための最良の方法は何ですか?
また、なぜ2番目の問題が発生するのか理解できません。その問題についてのあなたの意見も提案してください。
ありがとうございました!
それが役立つ場合、ファイルを成長させるための現在のコード:
(set! data (.map ^FileChannel data-fc FileChannel$MapMode/READ_WRITE
0 (+ (.limit ^MappedByteBuffer data) (+ DOC-HDR room))))