を使用してファイルを読み取るのは非常にMapped FileChannel
高速なようです...しかし、私は彼らがこれをどのように行っているのか疑問に思いましたか?
彼らは単に大きな(〜64kB)バッファーを読み取って、それを行進させているだけですか?それともそれ以上のものがありますか?
私はスピードに感銘を受け、その背後にあるアルゴリズムをよりよく理解したいと思っています。
を使用してファイルを読み取るのは非常にMapped FileChannel
高速なようです...しかし、私は彼らがこれをどのように行っているのか疑問に思いましたか?
彼らは単に大きな(〜64kB)バッファーを読み取って、それを行進させているだけですか?それともそれ以上のものがありますか?
私はスピードに感銘を受け、その背後にあるアルゴリズムをよりよく理解したいと思っています。
彼らはあなたが読むまで何も読みません、そしてあなたが読んだ部分は基本的にOSページングシステムを介して読まれます。オープンにはほとんど費用がかからないかもしれませんが、ファイルの同じ部分を繰り返し読み取ると、I/Oが繰り返される可能性があります。無料のものはありません。
メモリマッピング、ファイルをメモリにマップし、Javaはこれをラップするためのライブラリを提供するため、比較的安全にアクセスできます。
利点は次のとおりです。
欠点は次のとおりです。
メモリマップトファイルの操作を容易にするライブラリをいくつか作成しました。超低遅延が重要な場合や、ディスクキャッシュにあると予想される大量のメモリを読み取る必要がある場合に使用します。ディスクキャッシュを最大限に活用したい。
マップされたメモリがディスクサブシステムを高速化するわけではなく、それが制限要因である場合は、データの読み取り/書き込み方法は重要ではないことに注意してください。