Определение подходящего размера буфера

Я использую ByteBuffer.allocateDirect () для выделения некоторой буферной памяти для чтения файла в память, а затем со временем хэширую эти байты файлов и получаю из них хеш файла (SHA). Размер входных файлов очень велик, от нескольких килобайтс нескольких ГБs.

Я прочитал несколько потоков и страниц (даже некоторые на SO) о выборе размера буфера. Некоторые посоветовали попытаться выбрать тот, который использует собственная файловая система, чтобы минимизировать шансы операции чтения для частичного блока и т. Д. Например, буфер размером 4100 байт и NTFS по умолчанию равны 4096, поэтому дополнительные 4 бита потребуют отдельной операции чтения, что является чрезвычайно расточительным.

Так что придерживаясь степеней 2, 1024, 2048, 4096, 8192 и т. Д., Я видел несколько рекомендованных буферов размером 32 КБ.s, и другие рекомендуют делать буфер размером с входной файл (вероятно, хорошо для небольших файлов, но как насчет больших файлов?).

Насколько важно придерживаться собственных буферов размера блока? Говоря по-современному (если предположить, что современный SATA-накопитель или лучше с не менее 8 Мбайт в кеше и других современных ОС)магия» оптимизировать ввод / вывод) насколько критичен размер буфера и как мне лучше всего определить, какой размер установить в мой? Я мог бы статически установить его или определить динамически? Спасибо за понимание.

Ответы на вопрос(1)

Ваш ответ на вопрос