私は最近、バッファ サイズを 8MB に設定して「ディスク シークによるスループット ヒットを減らすBufferedOutputStream
」ことにより、Java をより効率的に使用するための提案を読みました。
私はこの最後のステートメントに興味をそそられます: ディスク シークからのスループット ヒットを減らす?!?
これはどういう意味ですか?なぜ 8MB がマジック ナンバーなのですか? 前もって感謝します!
私は最近、バッファ サイズを 8MB に設定して「ディスク シークによるスループット ヒットを減らすBufferedOutputStream
」ことにより、Java をより効率的に使用するための提案を読みました。
私はこの最後のステートメントに興味をそそられます: ディスク シークからのスループット ヒットを減らす?!?
これはどういう意味ですか?なぜ 8MB がマジック ナンバーなのですか? 前もって感謝します!
マジックナンバーでも何でもないと思います。実際にディスクに書き込む前に、その制限までデータをバッファするだけです。したがって、短いデータ ブロックがある場合は、それらをバッチ処理して、何度も書き込む代わりに 1 回だけ書き込むことができます。ディスクは各ブロックの先頭で正しい場所を見つける必要があるため、このセーブ ディスクはシークします。
そのため、データの小さなチャンクを多数書き込むときに、ディスク シークのいくつかの費用 (SSD を使用する場合はそれほど高価ではありません) を単純に節約できます。
更新: 8MB は、デフォルトのバッファ サイズである 8kb より 1 単位大きいだけです。