3

使用しているライブラリにいくつかの変更を加えているところです。メモリ使用量を減らすために、ライブラリは一時データをメモリに保持する代わりにディスクに書き込みます。ただし、私の使用シナリオでは、メモリに保持する方が効率的です。また、一時ファイルの名前が一定であり、異なるスレッドで同時に実行できないため、並行性の問題もあります (スレッドが互いのデータを破損するため)。

したがって、代わりにすべてのデータをメモリに保持するようにライブラリを変更する必要があります。私は最初にライブラリを作成したことがないため、コードを大幅に変更することにあまり慣れていません。したがって、できるだけ少ないリファクタリングでこれを行いたいと思います。ディスクに書き込むコードは非常に単純です。以下は (やや簡略化された) 例です。

final FileChannel fileChannel = this.randomAccessFile.getChannel();
fileChannel.position(calculatePosition());
while (blockData.hasRemaining())
{
 fileChannel.write(blockData);
}

ブロックの読み取りは非常に似ています (つまり、RandomAccessFile から取得する FileChannel を使用します)。

ファイルではなくメモリ内の場所にマップする FileChannel の実装を使用できる場合、最も簡単な解決策のように感じます。FileChannel の map-method を使用して、ファイルをメモリ内の場所にマップできることを知っています。しかし、それは逆です。これにより、ファイルへの「メモリ API」が得られます。一部のメモリに対して FileChannel インターフェイスが必要です。これの利用可能な実装はありますか?

4

2 に答える 2

1

おそらく、 Apache Commons VFSなどのメモリ内ファイルシステムを使用できます。

于 2009-12-16T14:54:17.860 に答える